3

JSON 文字列を解析しようとしていますが、不正な文字が原因で機能しません。これを見つけることができません...

ここに私が持っているものがあります:

make = function (el) {
    var config = el.getAttribute("data-config");
    console.log(config);
    var dyn = $.parseJSON(config)
    console.log(dyn);
}

var a= document.createElement("<a href='#' class='template' data-config=\"{'role':'button','iconpos':'left','icon':'star','corners':'false','shadow':'false', 'iconshadow':'false', 'theme':'a','class':'test', 'href':'index.html','text':'Star Icon', 'mini':'true', 'inline':'true'}\">Star Icon</a>");
console.log(a);
make(a);

元の文字列「a」のJSONを正しくエスケープ解除して、機能させる方法がよくわかりません。

Question_:
これを機能させるには、どの引用符をエスケープする必要がありますか?

ありがとう!

編集:

Ok。私はそれを使用してそれを理解しましたJquery(ただし、Javascriptのみを好むでしょう)。これは機能します:

make = function (el) {
    var config = el.attr("data-config");
        console.log(config);
    var dyn = $.parseJSON(config)
        console.log(dyn);
}

var c = $('<a href="#" class="template" data-config=\'{"role":"button","iconpos":"left","icon":"star","corners":"false","shadow":"false", "iconshadow":"false", "theme":"a","class":"test", "href":"index.html","text":"Star Icon", "mini":"true", "inline":"true"}\'>Star Icon</a>')
console.log(c);
make(c);

そのため、JSON 文字列の開始/終了引用符をエスケープするとうまくいくようです。実際の問題は、完全な文字列では使用できないことでしdocument.createElementた。document.createElement(a)要素を作成してから設定することしかできませんinnerHTML。これについては、もう少し調べる必要があります。

誰かがこれを行う Javascript のみの方法を教えてくれる場合は、お知らせください。

ありがとう!

4

1 に答える 1

7

JSON の文字列とオブジェクト キーは、二重引用符で囲む必要があります。属性内の二重引用符は無効なので、.でエスケープする&quot;必要があります。

また、おそらく文字列/の代わりにブール値true/を使用したいと思うでしょう。false"true""false"

var a = document.createElement('<a href="#" class="template" data-config="{&quot;role&quot;:&quot;button&quot;,&quot;iconpos&quot;:&quot;left&quot;,&quot;icon&quot;:&quot;star&quot;,&quot;corners&quot;:false,&quot;shadow&quot;:false,&quot;iconshadow&quot;:false,&quot;theme&quot;:&quot;a&quot;,&quot;class&quot;:&quot;test&quot;, &quot;href&quot;:&quot;index.html&quot;,&quot;text&quot;:&quot;Star Icon&quot;, &quot;mini&quot;:true,&quot;inline&quot;:true}\">Star Icon</a>');

これは完全に判読不能であり、後で属性を設定するだけという@millimooseの提案により、長期的にはこれをより簡単に処理できることに注意してください。

于 2013-03-20T19:58:54.027 に答える