2013-04-19 24 views
8

第三者からJSON文字列が送信されています。​​を使ってJavaScriptオブジェクトに解析しようとしましたが、もちろん失敗しました。JSON文字列を解析します。

理由ビーイングは、キーが文字列ではないということです。私は病気に形成された文字列を受け入れる必要が

{"min": 100} 

:(うまく解析する)有効なJSON文字列とは対照的に

{min: 100} 

今のところ。キーを正しく引用するのを忘れるのはよくある間違いです。これを有効なJSON文字列に変更して解析できるようにする良い方法はありますか?今のところ私はキャラクターごとに文字を解析し、オブジェクトを作成しなければならないかもしれませんが、それはひどく聞こえるでしょう。

アイデア?

+0

ここにいくつかの解決策があるようです:http://stackoverflow.com/questions/4210160/safely-parsing-a-json-string-with-unquoted-keys?rq=1 – showdev

+0

私は関数のコンストラクタこの場合、動作するはずです: 'var data = new Function( 'return' + illFormedJSON;)' – m90

+1

'(?:[az] +):+'すべての不適切なキーを検索します。これは完全な正規表現ではありませんので、開始する場所を与える必要があります。質問に完全に答える時間がない。 – travis

答えて

5

あなたは評価することができますが、ソースを信頼しないと、セキュリティ上の習慣が悪くなります。より良い解決方法は、文字列を手動で変更してキーを引用するか、他の誰かがあなたに書いたツールを使用することです(https://github.com/daepark/JSOLがdaeparkによって書かれています)。

+0

はhttps://github.com/daepark/JSOLを使用し、Node.jsモジュールに変換されました。 – lostintranslation

1

JSONである他に何に応じて、単純に文字列が'":''{"'':''{'を交換し、交換することができません。

2

私が評価するUglifyjsを使用して、ちょうど最近、これをしなかった:これは方法で本当にずさんである、とのeval()ベースのソリューションとして、すべて同じ問題を抱えている

var jsp = require("uglify-js").parser; 
var pro = require("uglify-js").uglify; 

var orig_code = "var myobject = " + badJSONobject; 
var ast = jsp.parse(orig_code); // parse code and get the initial AST 
var final_code = pro.gen_code(ast); // regenerate code 

$('head').append('<script>' + final_code + '; console.log(JSON.stringify(myobject));</script>'); 

、あなただけに必要がある場合データを一度解析/再フォーマットすると、JSオブジェクトのクリーンなJSONコピーが得られます。

+1

FWIW、これは最も遅い方法の1つになります。 Uglifyは完全なJavaScriptパーサーです。自分自身で文字列を操作することができます(例:http://stackoverflow.com/a/16110830/444991)。 – Matt

+0

はい、このアプローチは、効率が懸念されるリアルタイムアプリケーションではなく、Gruntスタイルのビルドスクリプト用に設計されています。 – BishopZ