문자열을 JSON 객체로 변환


148

JS는 문자열이 JSON이라고 어떻게 생각합니까?

JSON 객체가 전달 된 경우에만 작동하는 기능이 있습니다. JSON과 동일한 형식으로 문자열을 전달하면 작동하지 않습니다. 따라서 해당 함수에 전달 된 문자열이 JSON이라고 생각하도록하고 싶습니다. 문자열은 실제로 JSON 형식입니다.

나는 또한 다음을 시도했다. "handle as"매개 변수를 "JSON"으로하여 Ajax를 통해 문자열을 입력 한 다음 결과를 함수에 전달하면 작동합니다.

그래서 나는 문자열에 문제가 없다고 추론했다. 이 문자열을 JSON으로 어떻게 변환합니까? 아약스 요청을 통해 동일한 문자열을 얻은 다음 함수에 전달하면 작동하지만 직접 전달하면 작동하지 않습니다.

문자열은 다음과 같습니다.

  {
     "data": [
   {
  "id": "id1",
      "fields": [
        {
          "id": "name1",
          "label": "joker",
          "unit": "year"
        },
         {"id": "name2", "label": "Quantity"},
    ],
      "rows": [    data here....

and closing braces..


2
제목이 잘못되었습니다. 질문의 내용에 따라 JSON이 포함 된 문자열을 JavaScript 객체 / 배열로 변환하고 싶다고 말하고 싶습니다.
Felix Kling

좋아, 나는 그것을 해결했다. 문자열에 \ n이있었습니다. 이제 JSON.parse를 사용하는 방법 만 알아 내면됩니다.
Zer0

좋아, 내가 고쳤다. 고토 jsonlint.com 거기 당신의 문자열을 넣어. 올바르게 표시되면 JSONParse를 사용하여 동일한 결과를 얻을 수 있습니다.
Zer0

이 글을 읽는 사람이라면 제목은 "JSON 문자열을 객체로 변환"이라고합니다.
Chris G

답변:


353
var obj = JSON.parse(string);

stringjson 문자열은 어디에 있습니까 ?


작동하지 않습니다. "SyntaxError : JSON.parse : 예기치 않은 문자"오류가 발생합니다. 아약스 요청을 통해 동일한 문자열을 가져 와서 "JSON"으로 처리 할 때 문제가 발생하지 않는 것처럼 문자열에는 아무런 문제가 없습니다.
Zer0

acutal JSON 문자열을 게시하십시오
Kshitij

{ "data": [{id ":-여기에 큰 따옴표가 없습니다. 즉 id의 큰 따옴표를 시작합니다
Kshitij

2
Ajax를 통해 가져 오면 JSON으로 응답을 처리합니다. 내가 JSON 개체에이 변환 할 생각 그래서 ..
Zer0

2
나는 jsonlint.com에 가서 내 Json이
옳은지

26

당신은 JSON.parse()그것을 위해 사용할 수 있습니다 .

MDN에서 문서보기

예:

var myObj = JSON.parse('{"p": 5}');
console.log(myObj);

1
작동하지 않습니다. "SyntaxError : JSON.parse : 예기치 않은 문자"오류가 발생합니다. 아약스 요청을 통해 동일한 문자열을 가져 와서 "JSON"으로 처리 할 때 문제가 발생하지 않는 것처럼 문자열에는 아무런 문제가 없습니다.
Zer0

2
@ Zer0 : json 문자열과 함께 어떻게 시도하는지 질문을 업데이트해야합니다.
Sarfraz

4
@ Zer0 : 우리는 우리가 아는 한 최고의 지식에만 대답 할 수 있습니다. JSON 문자열이 있다고 가정하면 그에 따라 답변합니다. 문자열이 다른 것 같습니다. 게시하면이를 고려하여 답변을 드릴 수 있습니다. 코딩에 대한 질문을하는 경우 코드 / 데이터가 필수적입니다.
Felix Kling

7

나는 너와 비슷한 끈으로 같은 문제를 겪었다.

{id:1,field1:"someField"},{id:2,field1:"someOtherField"}

여기서 문제는 문자열의 구조입니다. json 파서는이 경우 2 개의 객체를 만들어야한다는 것을 인식하지 못했습니다. 그래서 내가 한 일은 어리석은 일입니다. 방금 문자열을 재구성 []하고 파서가 인식하는 것을 추가했습니다.

var myString = {id:1,field1:"someField"},{id:2,field1:"someOtherField"}
myString = '[' + myString +']'
var json = $.parseJSON(myString)

도움이 되길 바랍니다.

더 우아한 접근 방식을 가진 사람이 있다면 공유하십시오.


위의 코드에서 myString잘못 구성되었습니다 . 문자열이 아니며 형식이 잘못된 JSON입니다. 그런 다음 두 번째 줄은 중복됩니다. 다음은 그 내용입니다. var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' 이 게시물은 상당히 오래된 게시물이라는 것을 알고 있지만, 누군가가 찾은 경우 명확성을 추가 할 것이라고 생각했습니다.
제임스 에버하르트

작동하지 않고 오류가 발생하는 $.parseJSON위치 JSON.parse를 사용하여 문제를 해결했습니다.JSON.parse is not a function
brasofilo


3

Object Mapper를 사용하여 문자열을 HashMap으로 변환하십시오 ...

new ObjectMapper().readValue(string, Map.class);

내부적으로 맵은 JSON 객체로 작동합니다


2
var Data=[{"id": "name2", "label": "Quantity"}]

문자열 변수를 Json 구문 분석에 전달하십시오.

Objdata= Json.parse(Data);

귀하의 예에서 Data이미 객체이므로 파싱 할 필요가 없습니다. 문자열을 만들려면 모든 데이터를 따옴표로 묶어야합니다.
제임스 에버하르트

2

단순히 eval기능을 사용하십시오 .

var myJson = eval(theJsibStr);

eval은 사악합니다.이 접근법으로 보안에 매우주의하십시오
dparker

0

JSON.parse() 기능은 할 것입니다.

또는

Jquery를 사용하여

var obj = jQuery.parseJSON( '{ "name": "Vinod" }' );
alert( obj.name === "Vinod" );

0

다음과 같은 문자열이 있다고 생각합시다.

예 : "이름 : lucy, 나이 : 21, 성별 : 여성"

function getJsonData(query){
    let arrayOfKeyValues = query.split(',');
    let modifiedArray =  new Array();
    console.log(arrayOfKeyValues);
    for(let i=0;i< arrayOfKeyValues.length;i++){
        let arrayValues = arrayOfKeyValues[i].split(':');
        let arrayString ='"'+arrayValues[0]+'"'+':'+'"'+arrayValues[1]+'"';
        modifiedArray.push(arrayString);
    }
    let jsonDataString = '{'+modifiedArray.toString()+'}';
    let jsonData = JSON.parse(jsonDataString);
    console.log(jsonData);
    console.log(typeof jsonData);
    return jsonData;
}

let query = "name:lucy,age:21,gender:female";
let response = getJsonData(query);
console.log(response);

`

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.