【问题标题】:JSON Array to ArrayList<List<String>>JSON 数组到 ArrayList<List<String>>
【发布时间】:2015-09-27 06:37:30
【问题描述】:

我有一个像这样的 JSON 数组

[["ONE","CAT",0],["TWO","DOG",0]]

我想把它变成一个ArrayList&lt;List&lt;String&gt;&gt;,我试图循环它但无法让它工作。

我试过了

for (ArrayList arrayList: jsonArray) {
                for (Object array : arrayList) {

                }
            }

但后来我得到了一个编译错误。我无法遍历 JSON 对象数组。

【问题讨论】:

  • 什么是 jsonArray 变量?字符串还是数组?
  • 只能遍历数组。
  • @JunedAhsan jsonArray 是一个 JsonArray

标签: java arrays json arraylist


【解决方案1】:

另一种杰克逊方法。

ObjectMapper mapper = new ObjectMapper();
String json = "[[\"ONE\",\"CAT\",0],[\"TWO\",\"DOG\",0]]";
List<List<String>> output = new ArrayList<List<String>>();

JsonNode root = mapper.readTree(json);
for (JsonNode child : root) {
    output.add(mapper.readValue(child.traverse(), new TypeReference<ArrayList<String>>(){}));
}

【讨论】:

    【解决方案2】:

    为了将 json 数组解析为列表列表,我创建了以下方法。

    public static List<List<String>> convertJsonToListofList(String json) throws Exception{
        JSONArray jArray=new JSONArray(json);
        List<List<String>> list = new ArrayList<List<String>>();     
        int length = jArray.length();
        for(int i=0; i<length;i++) {
            JSONArray array;
            List<String> innerlist = new ArrayList<String>();
            String innerJsonArrayString = jArray.get(i).toString();
            JSONArray innerJsonArray = new JSONArray(innerJsonArrayString);
            int innerLength = innerJsonArray.length();
            for(int j=0;j<innerLength;j++){
                String str = innerJsonArray.getString(j);
                innerlist.add(str);
            }
            list.add(innerlist);      
        }
        return list;
    }
    

    你必须这样调用这个方法:

    try {
            List<List<String>> listoflist = convertJsonToListofList("[[\"ONE\",\"CAT\",0],[\"TWO\",\"DOG\",0]]");
            System.out.println(listoflist);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    

    我得到的输出是这个

    07-09 13:00:42.268: I/System.out(19986): [[ONE, CAT, 0], [TWO, DOG, 0]]
    

    我希望这就是你要找的:)

    【讨论】:

      【解决方案3】:
       1. try {
                      String abc = "[[\"ONE\",\"CAT\",0],[\"TWO\",\"DOG\",0]]";
                      JSONArray jsonarray = new JSONArray(abc);
                      if (jsonarray.length()>0) {
                          for (int i = 0; i < jsonarray.length(); i++) {
                              JSONArray jsonsubarray  = jsonarray.getJSONArray(i);
                              for (int j = 0; j < jsonsubarray.length(); j++) {
      
      
                                 Log.d("Value---->",""+jsonsubarray.get(j));
                              }
      
                          }
                      }
                  } catch (JSONException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
      

      【讨论】:

        【解决方案4】:

        您可以使用此代码解决您的问题

        String jsonValue = "[[\"ONE\",\"CAT\",0],[\"TWO\",\"DOG\",0]]";
          try{
          JSONArray array = (JSONArray) new JSONTokener(jsonValue).nextValue();
          ArrayList<JSONArray> arrayList = new ArrayList<>();
          arrayList.add(array);
          for (int i=0;i<arrayList.get(arrayList.size()-1).length();i++) {
                try {
                    JSONArray arr = arrayList.get(arrayList.size()-1).getJSONArray(i);
                    for (int j = 0; j < arr.length(); j++) {
                        System.out.println("Value = " + arr.get(j));
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
          }catch (JSONException e){
        
          }
        

        【讨论】:

          【解决方案5】:

          我想这就是你要找的东西:

          try {
                  ArrayList<ArrayList<Object>> mainarraylist = new ArrayList<ArrayList<Object>>();
                  JSONArray jsonarray = new JSONArray(yourstringjson);
                  if (jsonarray.length()>0) {
                      for (int i = 0; i < jsonarray.length(); i++) {
                         ArrayList<String> subarray;
                         JSONArray jsonsubarray  = jsonarray.getJSONArray(i);
                         for (int i = 0; i < jsonsubarray.length(); i++) {
                           subarray = new ArrayList<String>;
          
                           jsonsubarray.add(jsonsubarray.get(i));
                       }
                     mainarraylist.add(jsonsubarray);
                      }
                  }
              } catch (JSONException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
          

          这会给你结果:mainarraylist.get(0).get(0) equals ONE

          仅供参考:代码未编译,因此可能存在一些错误。这是您的解决方案的摘要。

          【讨论】:

            【解决方案6】:

            首先,Java 不喜欢混合类型。如果您确定可以使用List&lt;List&lt;String&gt;&gt;,请继续阅读。

            我建议使用杰克逊图书馆和ObjectMapper#readTree

            ObjectMapper mapper = new ObjectMapper();
            JsonNode node = mapper.readTree("JSON CONTENT");
            List<List<String>> convertedList = new ArrayList<List<String>>();
            for (JsonNode arrNode : node) {
                List<String> currList = new ArrayList<String>();
                convertedList.add(currList);
                for (JsonNode dataNode : arrNode) {
                    currList.add(dataNode.asText());
                }
            }
            System.out.println(convertedList);
            

            【讨论】:

              【解决方案7】:

              你可以试试这个方法——

              try {
                      ArrayList<Object> _arrList = new ArrayList<Object>();
                      JSONArray _jArryMain = new JSONArray("YOUR_JSON_STRING");
                      if (_jArryMain.length()>0) {
                          for (int i = 0; i < _jArryMain.length(); i++) {
                              JSONArray _jArraySub  = _jArryMain.getJSONArray(i);
                              _arrList.add(_jArraySub);
              
                          }
                      }
                  } catch (JSONException e) {
                      // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
              

              【讨论】:

              • @spenf10 表示您可以得到类似字符串 "One,cat,0,two,dog,0" 的结果
              猜你喜欢
              • 1970-01-01
              • 2014-07-22
              • 2017-05-08
              • 2013-11-03
              • 2012-10-19
              • 1970-01-01
              • 2013-03-27
              • 2012-12-26
              • 2014-04-12
              相关资源
              最近更新 更多