【问题标题】:get JSON value using for loop android使用for循环android获取JSON值
【发布时间】:2015-05-02 04:24:19
【问题描述】:

大家好,我需要帮助以获取 JSON 数据中的 value obj

[
 { 
 "type": "visitors",
 "dates": [
     {
      "date": "2015-05-01",
      "items": [
           {
            "value": "100"
           }
        ]
      }
  ]
},
{
  "type": "actions",
  "dates": [
        {
         "date": "2015-05-01",
         "items": [
              {
               "value": "230"
              }
          ]
    }
  ]
},
{
  "type": "actions-average",
  "dates": [
       {
        "date": "2015-05-01",
        "items": [
             {
              "value": "2.3"
             }
          ]
        }
       ]
    }
 ]

我使用此代码获取value,但我想将不同的value 分配给不同的变量

 for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject jsonObject = jsonArray.getJSONObject(i);
        String value = null;
        JSONArray datesArray = jsonObject.getJSONArray("dates");
        for (int j = 0; j < datesArray.length(); j++) {
            JSONObject dates = datesArray.getJSONObject(j);
            JSONArray itemsArray = dates.getJSONArray("items");
            for (int k = 0; k < itemsArray.length(); k++) {
                JSONObject vvObj = itemsArray.getJSONObject(k);
                value = vvObj.getString("value");
                //Log.v(TAG, "Edited JSONData: " + k + value);
            }
        }
        values[i] = value;
        //Log.v(TAG, "loop JSONData: " + Arrays.toString(values));
    }

最终结果是这样的

var1 = value // form the first loop

var2 = value // form the 2nd loop

var3 = value // form the 3rd loop

【问题讨论】:

  • 您使用当前代码遇到了什么问题?
  • 我得到value,但我想为每个时间循环分配一个不同的变量,例如第一个循环值分配给var1,第二个循环值分配给var2,就像这样
  • 您将所有值存储在 values 中,然后从 values 读取并分配给其他变量,例如 var1=values[0],var2=values[1],... 那么问题出在哪里?
  • 是你需要进入值数组中的值,如代码中所示。您可以在 for 循环结束后通过从数组中获取值来分配您需要的变量
  • @Msk 我从 for 循环中得到 value,但我想分配给不同的变量,它只是我的应用程序中显示的示例,我得到更多的 10 JSONObject 这样我想分配给不同的变量

标签: android json for-loop


【解决方案1】:

试试这个。你把'values [i] = value'放在错误的地方。它会从所有数组中获取所有值。如果你需要不同的justa sk,我会修改它。

ArrayList<String> values = new ArrayList<String>();

for (int i = 0; i < jsonArray.length(); i++) 
{
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            String value = null;
            JSONArray datesArray = jsonObject.getJSONArray("dates");

            for (int j = 0; j < datesArray.length(); j++) 
             {
                JSONObject dates = datesArray.getJSONObject(j);

                JSONArray itemsArray = dates.getJSONArray("items");

                 for (int k = 0; k < itemsArray.length(); k++) 
                    {
                      JSONObject vvObj = itemsArray.getJSONObject(k);

                      values.add( vvObj.getString("value") );
                    }


             }

}

//check this part how to get back your data          
String output ;

for (int i = 0; i < values.size(); i++) 
{
    output = values.get(i) ;

    //do something with value from possition i , is stored in output
    Log.v(TAG, "loop JSONData: " + output );
}

【讨论】:

  • 这有助于但如何分配给不同的变量,如 var1 = first loop valuevar2 = 2nd loop value
  • 如果你做 values.get(i) 你从位置 i .Ex values.get(0) = 100 获得值。或者你也想提取 "2015-05-01" ?您不需要为它们分配其他变量,只需使用 values.get(5) 如果您需要来自位置 6 等的值。您从 0 开始计数。您需要执行 String a= values.get(5)跨度>
  • 您不能在运行程序时创建变量名 'var1' 'var2'。您只能在编写程序时定义变量(例如 String str),而不是在程序运行时定义变量
【解决方案2】:

也许这会有所帮助

String[] values=new String[jsonArray.length()];
//create string array of size == jsonArray.length() outside of forloop

for (int i = 0; i < jsonArray.length(); i++) {
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    //String value = null;//comment this line
    JSONArray datesArray = jsonObject.getJSONArray("dates");
    for (int j = 0; j < datesArray.length(); j++) {
        JSONObject dates = datesArray.getJSONObject(j);
        JSONArray itemsArray = dates.getJSONArray("items");
        for (int k = 0; k < itemsArray.length(); k++) {
            JSONObject vvObj = itemsArray.getJSONObject(k);
            value = vvObj.getString("value");
            //Log.v(TAG, "Edited JSONData: " + k + value);
        }
    }
    values[i] = value;
    //Log.v(TAG, "loop JSONData: " + Arrays.toString(values));
}

【讨论】:

    猜你喜欢
    • 2013-09-22
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2022-12-23
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多