web-dev-qa-db-ja.com

JSONオブジェクトからJSオブジェクト

JSオブジェクトを使用して、Googleビジュアライゼーションでグラフを作成しています。データソースを設計しようとしています。最初に、クライアント側でJSオブジェクトを作成しました。

var JSONObject = {
    cols: [{id: 'date', label: 'Date', type: 'date'},
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'},
        {id: 'soldpens', label: 'Sold Pens', type: 'number'}],
    rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]},
        {c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]},
     {c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}]  
};

var data = new google.visualization.DataTable(JSONObject, 0.5);

次に、データを動的に取得する必要があります。そこで、JSON文字列を返すページにAJAXリクエストを送信します。

 "cols: [{id: 'date', label: 'Date', type: 'date'},
{id: 'soldpencils', label: 'Sold Pencils', type: 'number'},
{id: 'soldpens', label: 'Sold Pens', type: 'number'}],
  rows: [{c:[{v: new Date(2008,1,1),f:'2/1/2008'},{v: 30000}, {v: 40645}]},
      {c:[{v: new Date(2008,1,2),f:'2/2/2008'},{v: 14045}, {v: 20374}]},
{c:[{v: new Date(2008,1,3),f:'2/3/2008'},{v: 55022}, {v: 50766}]}"

これを変数に保存します:

var var1 = "cols: [{i ....... 66}]}"

として表示

alert(var1);

今、私の仕事はこの文字列からJSオブジェクトを作成することです。これは機能していません。 JSオブジェクトを使用すると、すべてが正常に機能し、必要なグラフを取得できます。これで、アラートメッセージから確認したAJAXリクエストから同じ値の文字列をnオブジェクトに入れようとすると、オブジェクトが正しく作成されません。あなたの意見と訂正やアドバイスを教えてください。

70
Vinod

一部の最新のブラウザは、JSONをネイティブオブジェクトに解析するためのサポートを備えています。

var var1 = '{"cols": [{"i" ....... 66}]}';
var result = JSON.parse(var1);

サポートしていないブラウザの場合、JSONオブジェクトの安全な解析のために json.org からjson2.jsをダウンロードできます。スクリプトはネイティブJSONサポートをチェックし、サポートされていない場合は、代わりにJSONグローバルオブジェクトを提供します。より高速なネイティブオブジェクトが利用可能な場合、スクリプトをそのまま終了します。ただし、有効なJSONを指定する必要があります。そうしないと、エラーがスローされます。JSONの有効性は http://jslint.com または http://jsonlint.comで確認できます。

133
Andy E

あなたの質問の文字列は有効なjson文字列ではありません。 json.orgウェブサイト から:

JSONは2つの構造で構築されます。

* A collection of name/value pairs. In various languages, this is 
  realized as an object, record, struct, dictionary, hash table, keyed list, or
  associative array.
* An ordered list of values. In most languages, this is realized as an
  array, vector, list, or sequence.

基本的に、json文字列は常に{または[で始まります。

その後、@ Andy Eと@Cryoが言ったように、json2.jsまたは他のライブラリで文字列を解析できます。

私見evalはjavascriptプログラムであるため、evalを避ける必要があります。したがって、セキュリティの問題が発生する可能性があります。

5
filippo

文字列内のデータを信頼する場合は、eval(jsonString)を使用できます。そうでない場合は、適切に解析する必要があります-コードサンプルについてはjson.orgを確認してください。

5
whackamole

JSON.orgの このライブラリ を使用して、文字列をJSONオブジェクトに変換できます。

var var1_obj = JSON.parse(var1);

または、 jquery-json ライブラリも使用できます。

var var1_obj = $.toJSON(var1);
4
nortron

返される文字列は有効なJSONではありません。オブジェクトを作成するには、オブジェクト内の名前を引用符で囲み、文字列全体を{ … }に入れる必要があります。 JSONにはnew Date()などを含めることもできません。 JSONは、文字列、数値、オブジェクト、配列、truefalse、およびnullのみを持つJavaScriptの小さなサブセットです。

詳細については、 JSON grammar を参照してください。

3
Gumbo