JSON文字列を解析する際の構文エラー

Webページの一部をレンダリングしたサンプルJSONがあります。

{"html": {"#data": "\n

Data

\n<div class="\"manufacturer-image\"">\n \n</div>\n
<form action="\"/manage/update-manufacturer-data/3\"" method="\"post\"">\n \n 
<div class="\"field\"">\n <div class="\"label\"">\n :\n 
</div>\n \n \n <div class="\"error\"">\n 
<input id="\"id_name\"" name="\"name\"" maxlength="50" type="\"text\"">\n 
  • Pole wymagane
\n </div>\n \n </div>\n\n 
<div class="\"field\"">\n <div class="\"label\"">\n :\n 
</div>\n \n \n <div>\n <input name="\"image\"" id="\"id_image\"" type="\"file\"">\n 
</div>\n \n </div>\n\n <div class="\"field\"">\n <div class="\"label\"">\n 
:\n </div>\n \n \n <div>\n 

\n </div>\n \n 
</div>\n \n <div class="\"buttons\"">\n <input class="\"ajax-save-button" button\"="" type="\"submit\"">\n 
</div>\n</form>"}}

この文字列はajax呼び出しで返され、jQuery 1.6.1はエラーをスローします:

SyntaxError: JSON.parse: expected ',' or '}' after property value in object

コードの次の部分では:

parseJSON: function( data ) {
    if ( typeof data !== "string" || !data ) {
        return null;
    }
   //Make sure leading/trailing whitespace is removed (IE can't handle it)
    data = jQuery.trim( data );

   //Attempt to parse using the native JSON parser first
    if ( window.JSON && window.JSON.parse ) {
        console.warn('data: ', data);
        var ret;
        try{
            ret = window.JSON.parse(data);
        } catch(e){
            ret = {};
            console.warn(e);
        }
        return ret;
        //return window.JSON.parse( data );
    }

私はここで何が欠けていますか?


編集:

私は以前の 'json'(これはPythonのsimplejson libで作成されていたので、どのように動作するのだろうか)とjsonlint showを見て、適切なJSONがあることを確認しました。それでも問題は変わりません。新しい文字列:

{"html": [{"#data": "\n

Data

\n<div class="manufacturer-image">\n    \n</div>\n<form action="/manage/update-manufacturer-data/4" method="post">\n        \n    <div class="field">\n        <div class="label">\n            :\n        </div>\n        \n        \n            <div class="error">\n                <input id="id_name" type="text" name="name" maxlength="50" />\n                
  • Pole wymagane
\n            </div>\n        \n    </div>\n\n    <div class="field">\n        <div class="label">\n            :\n        </div>\n        \n        \n            <div>\n                <input type="file" name="image" id="id_image" />\n            </div>\n        \n    </div>\n\n    <div class="field">\n        <div class="label">\n            :\n        </div>\n        \n        \n            <div>\n                

\n            </div>\n        \n    </div>\n  \n    <div class="buttons">\n        <input type="submit" class="ajax-save-button button" />\n    </div>\n</form>"}]}

EDIT2: OK、それは私のバックエンドを残しているJSOnが適切だと思われますが、ダムjQueryはちょっと奇妙なそれぞれの "" 'の周りに別の引用符を追加します。

4
私は知らないが、それの外観からjsonは無効と思われる...
追加された 著者 Rafay,

5 答え

storejson= getJSonObject("@ViewBag.JsonData");

function getJSonObject(value) {
    return $.parseJSON(value.replace(/"/ig, '"'));
}
10
追加された

文字列の \ "" \ "に置き換えられているようですので、データは有効なJSONではなく有効です。

JSONの著者に連絡して、十分な JSON ライブラリ 利用可能 for all languages プラットフォームを参照してください。

8
追加された
@JamieRRytlewski良い点。残念ながら、私は特定のバリデーションへのリンクを生成する方法を見つけることができないので、私はideoneでJavaScriptモードを使用しました。
追加された 著者 phihag,
jsonlint.com を使用して、有効なJSONかどうかを確認することができます。また、上記は有効なJSONではありません。
追加された 著者 Jamie R Rytlewski,

私はここで間違っているかもしれませんが、JSONデータそのものが原因で動作しないと思います。 JSONパーサーはおそらく、JSONの文字列変数に含まれているHTMLの二重引用符を突き止めます。 JSONデータを出力する前にHTML文字列を前処理して二重引用符を別のものに変更するとうまくいくと思います。 (そして、JSONデータを解析した後は逆の動作をします)

1つの例では少し明確になるかもしれません:

instead of this: {"html": { "#data": "<input name="somename" type="text"/>"} }

私はこれを使用しようとします:

{"html": { "#data": "<input name="somename" type="text"/>"} }

それが役に立てば幸い...

3
追加された
これは私のために働いた。引用置換を簡略化するために、私は JSON.stringify(foo).replace(/ \\ "/ g、 '\\\\"')
追加された 著者 Rahul Gupta-Iwasaki,

JSON = Javascript Object Notationのため、 "#data" プロパティの値が無効な文字列です。

You can validate your JSON here

2
追加された

おそらく、HTMLコード自体に同じ二重引用符を使用しているため、JSONはそのプロパティ値を考えるので、すべてのHTMLに対して一重引用符を使用してみてください

0
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript