0

我有这个 JSON 数据

{"mydata":{"numbers":[12,23,34]}}

通过采用 JSONObject 我得到以下对象:

JSONObject obj = mydataObj.getJSONObject("mydata");

所以obj是这样的:

{"numbers":[12,23,34]}

我需要使用数字元素。所以我会做一个for循环来使用元素。

String numbers = myObject.getString("numbers");

这给出了一个这样的字符串:

["12","23","34"]

如何将其转换为数组或数组列表?
所以我将有一个值为 12、23 和 34 的数组。

编辑:得到数组,JSONArray的ArrayList后,我将比较“numbers1_Array”和“numbers2_Array”。然后我会找到存在于第一个数组中但不存在于第二个数组中的元素。因此选择与哪个比较操作相关的数据结构类型更容易。

4

5 回答 5

3

您可以尝试getJSONArray()代替getString(),然后简单地迭代JSONArray并构建您的ArrayList.

于 2013-05-14T13:25:58.300 回答
1

尝试这个

   JSONArray jArray = jObj.getJSONArray("numbers");
   List list<Long> = new ArrayList<Long>(); 

    for(int i=0; i < jArray .length(); i++)
        list.add(new Long((String)jArray .get(i)));
于 2013-05-14T13:25:43.753 回答
0

其他解决方案很好,您也可以像这样使用您的字符串

numbers=numbers.substring(1,s.length()-1).replaceAll("\"","");
List<String> sample = new ArrayList<String>();
sample.addAll(Arrays.asList(s.split(",")));
于 2013-05-14T13:48:30.937 回答
0

在 JSONObject 中获取对象后,您拥有的是

JSONObject obj ===>>> {"numbers":[12,23,34]}

现在这个对象是一个数组,所以你不能只通过传递名称来访问一个数组,你必须做这样的事情

JSONArray numbers = (JSONArray) jsonObject.get("numbers");
        Iterator<Integer> iterator = numbers.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
                    // this iterator.next() is your element from the JSON array
                    //you can store like 
                    // int val = iterator.next()
                    // better you store this in an array 
        }
于 2013-05-14T13:28:06.477 回答
0

您可以使用 Guava 以这种方式进行操作。https://github.com/google/guava

    String numbers = myObject.getString("numbers");
    List list = new ArrayList();
    JSONArray numbersJsonArray = new JSONArray(numbers);
    for (int i = 0; i < numbersJsonArray.length(); i ++) {
        list.add(numbersJsonArray.getInt(i));
    }// after this loop if what you need is the array list you have it all in the list


    int[] array = Ints.toArray(list); // if you need array of ints
于 2017-12-04T02:28:36.733 回答