2017-01-19 1 views
0

javascript에서 JSON 객체를 다시 파싱 할 수 있습니까? 정상적인 조건에서는 다음과 같은 JSON 객체를 파싱합니다.자바 스크립트에서 두 개의 JSON 객체를 연속적으로 파싱 할 수 있습니까?

{"success":true, "canUpload":false, "array":[ ], "test": "value"} 

위의 내용에는 아무런 문제가 없습니다. 그러나, 나는 거기에 두 개의 JSON 개체를 함께 연결할 수있는 두 개의 JSON 라이브러리를 구문 분석 할 수 있는지 궁금 무엇입니까? 예 :

{"success":true, "canUpload":false, "array":[ ], "test": "value"}{"newJSONobj":"new value1"} 

두 번째 예에서 두 개의 JSON 개체가 필요합니다.

+4

당신은 여기에 더 큰 문제가 왜 데이터 2 JSON 문자열 연결됩니다? – Joseph

+1

JSON 개체 또는 문자열? 문자열을 파싱합니다. – SpYk3HH

+0

@JosephtheDreamer - COTS 제품의 소스 코드에 액세스 할 수 없기 때문에 새로운 데이터로 HttpResponse를 수정하려고하기 때문에 HttpResponse 본문 내용을 삭제하고 다시 작성할 수 없습니다. 개인적인.따라서 응답에 필요한 데이터를 추가하고 JavaScript에서 적절히 구문 분석하는 방법을 알아 내려고 노력하고 있습니다. – user1068636

답변

2

웹 표준을 사용하는 경우에는 사용할 수 없습니다. JSON 문자열을 만드는 소스에 액세스 할 수 있으면 올바르게 형식을 지정하십시오. 이를 두 개의 객체 배열로 변환해야합니다. 이 두 객체를 쉼표로 구분 한 다음이 두 객체를 대괄호로 묶어야합니다. 당신은 소스에 액세스 할 수없는 경우

[{ 
    "success": true, 
    "canUpload": false, 
    "array": [], 
    "test": "value" 
}, { 
    "newJSONobj": "new value1" 
}] 

, 당신은 나와있는 형식을 달성하기 위해 중 하나에 약간의 자바 스크립트 문자열 조작을 사용하여 2 개 개의 분리 문자열로 그것을 탈옥, 또는 추가 문자를 추가해야합니다 위.

var jsonObjects = JSON.parse('[' + jsonString.replace(/\}\{/g, '},{') + ']'); 

이것은 본질적 브래킷에서 두 객체를 감싸고 콤마 (2 오브젝트의 배열을 만드는)이 두 물체를 분리 :이 가능한 솔루션이다. 그러나 이것이 100 % 신뢰할 수 없다는 것을 알아 두십시오. 이 절차에서 올바르게 처리 할 수없는 다른 형식의 데이터를 얻을 수 있습니다.

+0

문제는이 COTS 소프트웨어의 소스 코드에 액세스 할 수 없기 때문에 내가 할 수 없다는 것입니다. HttpResponse (한번 작성된 것)는 다시 쓸 수 없으므로 COTS와 함께 작업하고 추가하려고합니다. 클라이언트 측에서 구문 분석해야하는 데이터 – user1068636

2

문자열 작업으로 JSON 배열로 변환 할 수 있습니다. 유사 :

var objects = JSON.parse('[' + yourString.replace(/\}\{/g, '},{') + ']'); 

두 경우 모두 (하나 이상의 개체) 작동합니다.

+1

'/ \} \ s * \ {/ g'이 (가) 사이에 공백이 있으면. –

+0

@ibrahimmahrir 네 말이 맞아. 예제에는 아무 것도 없지만 더 강력하게 만들 것입니다. – zord

+0

+ 개체 중 하나가 배열 인 경우 문제가 발생합니다. –

0

표시 한 내용이 유효한 json 문자열 (개체)이 아니므로 구문 분석하려고하면 오류가 발생합니다. 연결된 문자열이 자신에게 넘어가는 대신 생성되면 아래와 같이 두 개 이상의 객체가 포함 된 문자열을 만들 수 있습니다. 그런 다음 두 개 이상의 객체로 이루어진 배열 (객체 자체)을 가져옵니다.

 
    '[{"success":true, "canUpload":false, "array":[ ], "test": "value},{"newJSONobj":"new value1"}]' 
0

그렇게 같은 JSON 문자열의 경우

'{"success":true, "canUpload":false, "array":[ ], "test": "value"}{"newJSONobj":"new value1"}' 

그런 예. 당신은 단지 약간의 modding을 할 필요가 있습니다.

data = '{"success":true, "canUpload":false, "array":[ ], "test": "value"}{"newJSONobj":"new value1"}' 
data.split(/(?!})(?={)/).map(function(v, i) { return JSON.parse(v); }) 

?

var data = '{"success":true, "canUpload":false, "array":[ ], "test": "value"}{"newJSONobj":"new value1"}'; 
 

 
var result = data.split(/(?!})(?={)/).map(function(v, i) { return JSON.parse(v); }); 
 

 
console.log(result)
<h1><center>See Console</center><h1>

관련 문제