78

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リクエストからの同じ値の文字列をオブジェクトに入れようとすると、オブジェクトが正しく作成されません。ご意見、訂正、アドバイスをお願いします。

4

5 に答える 5

138

最近の一部のブラウザーは、JSONをネイティブオブジェクトに解析することをサポートしています。

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

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

于 2010-02-13T09:58:33.903 に答える
5

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

于 2010-02-13T09:55:50.100 に答える
5

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

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は避ける必要があります。

于 2010-02-13T10:19:12.497 に答える
4

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

var var1_obj = JSON.parse(var1);

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

var var1_obj = $.toJSON(var1);
于 2010-02-13T09:56:09.883 に答える
3

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

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

于 2010-02-13T10:19:21.110 に答える