0

以下に示す、かなり複雑なJSON配列を扱っています。訪問が含まれるCountryオブジェクトの配列を作成しようとしています。配列のサンプルを次に示します。

{
   "data":[
      {
         "period":"Month",
         "start_date":"2012-06",
         "end_date":"2012-07",
         "attributes":{

         },
         "measures":{
            "Visits":1000000
         },
         "SubRows":[
            {
               "Unknown":{
                  "measures":{
                     "Visits":1000
                  },
                  "SubRows":null
               },
               "**":{
                  "measures":{
                     "Visits":1000
                  },
                  "SubRows":null
               },
               "Afghanistan":{
                  "measures":{
                     "Visits":1000
                  },
                  "SubRows":null
               },
               "Aland Islands":{
                  "measures":{
                     "Visits":1000
                  },
                  "SubRows":null
               },
               "Albania":{
                  "measures":{
                     "Visits":100
                  },
                  "SubRows":null
               },
            }
         ]
      }
   ]
}

私はdata[0].SubRows[0]国のオブジェクトの配列にたどり着くために使用していますが、各サブオブジェクトの名前が異なるため、1つ下に移動する方法に困惑していますか?私の意図する出力は、次のようにGoogleVisualizationAPI用です。

var data = google.visualization.arrayToDataTable([
  ['Country', '% Visits'],
    ['United Kingdom', 1000],
    ['United States', 1000],
    ['France', 1000],
    ['Australia', 1000],
]);
4

2 に答える 2

3

用途...ステートメント内:

var Country = JSONObject['data']['SubRows'];
var Data = {};
for(name in Country)
{
    Data[name] = Country[name]['measures']['Visits'];
}

これをあなたのニーズに合わせるのは簡単なはずです。

于 2012-07-18T08:33:01.993 に答える
2

Glibnesはfor in、変数名に固執して、提案を受け入れています(BTW:JSでは、これらはオブジェクトであり、配列ではありません...ええと、配列はオブジェクトですが、私はそれほど衒学的ではありません)。

var measures = {};
for (var cName in data[0].SubRows[0])//your country objects
{//it's always a good idea to check if a property is set directly to the object
 //if not, inheritance chain properties will show up here, too
    if (data[0].SubRows[0].hasOwnProperty(cName))
    {
        //assuming this object will Always be set, if not: check first
        measures[cName] = data[0].SubRows[0][cName].measures.Visits;
    }
}

measuresこれで、国がキーで値が訪問である1レベルのオブジェクトになります。追加のチェックを追加するか、値を直接使用してコンテンツを作成するか、...

私が正しく理解していれば、本当に必要なのは配列の配列です。

var result = [['Country', '% Visits']];
for (var cName in data[0].SubRows[0])//your country objects
{
    if (data[0].SubRows[0].hasOwnProperty(cName))
    {
        result.push([cName,data[0].SubRows[0][cName].measures.Visits]);
    }
}

resultこれで、それぞれ2つの値を持つ配列で構成される配列になります。result[x][0]->国およびresult[x][1]->メジャーの値訪問:

result[1][0] === 'United Kingdom' && result[1][1] == 1000
于 2012-07-18T08:43:00.660 に答える