2017-01-19 4 views
0

javascriptでJSONオブジェクトを背中合わせに解析することはできますか?通常の条件下では、次のようなJSONオブジェクトを解析しています。JavaScriptの2つのJSONオブジェクトを連続して解析できますか?

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

と私は上記に問題はありません。しかし、2つのJSONオブジェクトを一緒に連結して検出できる2つのJSONライブラリを解析できるかどうかは疑問です。たとえば、

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

2番目の例で2つのJSONオブジェクトが必要です。

+4

あなたはここに大きな問題がある:なぜあなたのデータ2つのJSON文字列を連結しているのですか? – Joseph

+1

JSONオブジェクトまたは文字列ですか?あなたは文字列を解析します。 – SpYk3HH

+0

@JosephtheDreamer - 私はCOTS製品のソースコードにアクセスできず、新しいデータでHttpResponseを変更しようとしているためですが、HttpResponse本体のコンテンツを削除して、自分の。そこで、私は応答に必要なデータを追加して、それをJavaScriptで適切に解析する方法を見つけ出そうとしています。 – user1068636

答えて

2

ウェブ標準を使用している場合は、できません。 JSON文字列を作成するソースにアクセスできる場合は、正しくフォーマットしてください。これを2つのオブジェクトの配列に変換する必要があります。これらの2つのオブジェクトをコンマで区切り、それらの2つのオブジェクトをブラケットでラップする必要があります。あなたがソースへのアクセス権を持っていない場合

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

、あなたが記載されているフォーマットを達成するために2つの別々の文字列としてそれを抜け出す、またはいくつかの追加の文字を追加するか、いくつかのJavaScriptの文字列操作を使用する必要があります上記。これは可能な解決策である。

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

これは本質的に括弧であなたの2つのオブジェクトをラップし、コンマ(2つのオブジェクトの配列を作成する)と2つのオブジェクトを分離します。 これは100%信頼できるものではないことにご注意ください。この手順では正しく処理できない他の形式のデータを取得することがあります。

+0

問題は、このCOTSソフトウェアのソースコードにアクセスできないため、HttpResponse(書き込まれた後)を書き直すことができないため、私はこれを行うことができません。単にCOTSで作業し、私はクライアント側で解析する必要があるデータ – user1068636

2

文字列操作でJSON配列に変換できます。次のようになります。

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

これは両方のケース(1つ以上のオブジェクト)で機能します。

+1

'/ \} \ s * \ {/ g'の間に空白がある場合。 –

+0

@ibrahimmahrirあなたは正しいです。この例では何もありませんでしたが、それはより堅牢になります。 – zord

+0

+オブジェクトの1つが配列の場合は問題が発生します。 –

0

あなたが示したものは、有効なjson文字列(オブジェクト)ではないため、解析しようとするとエラーが発生します。連結された文字列があなた自身に渡されるのではなく自分で作成された場合、以下のような2つ(またはそれ以上)のオブジェクトを持つ文字列を作成することができます。次に、2つ(またはそれ以上)のオブジェクトの配列(オブジェクト自体)を取得します。

 
    '[{"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>

関連する問題