文字列をJSONオブジェクトに変換する


148

JSに文字列がJSONであるとどう思わせるのですか?

JSONオブジェクトが渡された場合にのみ機能する関数があります。JSONと同じ形式の文字列を渡しても機能しません。だから私はその関数に渡された文字列がJSONであると考えさせたいのです。文字列は確かにJSON形式です。

以下も試しました。Ajaxを介して文字列を入力し、 "handle as"パラメータを "JSON"として、結果を関数に渡したときに機能しました。

だから私は問題が文字列ではないことを推定しました。この文字列をJSONに変換するにはどうすればよいですか?ajaxリクエストを介して同じ文字列を取得し、それを関数に渡すと機能しますが、直接渡すと機能しません。

文字列は次のとおりです。

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

OK、私はそれを解決しました。文字列に\ nがありました。これでJSON.parseを使用する方法を理解するだけです。
Zer0

修正しました。後藤jsonlint.comし、そこに文字列を置きます。正しいと表示されている場合は、JSONParseを使用して同じことを実現できます。
Zer0

誰かがこれを読んだ場合、タイトルは「JSON文字列をオブジェクトに変換する」ことになっているはずです
Chris G

回答:


353
var obj = JSON.parse(string);

stringあなたのjson文字列はどこですか?


これは機能していません。エラー「SyntaxError:JSON.parse:予期しない文字」がスローされます。ajaxリクエストで同じ文字列を取得して「JSON」として処理しても問題は発生しないため、文字列に問題はありません。
Zer0

実際のJSON文字列を投稿してください
Kshitij

{"data":[{id ":-ここには二重引用符がありません。つまり、idの二重引用符を開始します
Kshitij

2
Ajaxを介して取得すると、応答はJSONとして処理されるのと同じように機能します。私は、JSONオブジェクトにこれを変換するために持っていると思うので...
ZER0

2
私は結局jsonlint.comに行き、私のJsonが正しいことを確認しました
Zer0

26

そのJSON.parse()ために使用できます。

MDNのドキュメントを参照

例:

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

1
これは機能していません。エラー「SyntaxError:JSON.parse:予期しない文字」がスローされます。ajaxリクエストで同じ文字列を取得して「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です。次に、2行目は冗長になります。ここにそれがあるべきです: var myString = '[{"id":1,"field1":"someField"},{"id":2,"field1":"someOtherField"}]' 私はこれがかなり古い投稿であることを知っています、しかし私は誰かがそれを見つけた場合に備えて私はいくつかの明確さを追加すると思いました。
James Eberhardt

$.parseJSONwhere 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 parseに渡します。

Objdata= Json.parse(Data);

あなたの例でDataは、はすでにオブジェクトなので、解析する必要はありません。文字列にするためには、すべてのデータを囲む引用符が必要です。
James Eberhardt


0

JSON.parse() 関数が行います。

または

jqueryを使用して、

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

0

次のような文字列があるとしましょう

例:「name:lucy、age:21、gender:female」

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.