JSON for Java,编码JSON数组 - 流媒体

时间:2010-09-13 11:51:24

标签: java json

[我有一些代码来创建一个JSON数组。在此代码中,我将一些值传递给xyz在一个看起来像这样的循环中。

   JSONArray list = new JSONArray();
   String jsonText = null;
   for (int j = 0; j < 4; j++) {
       list.add(new Integer(x));
       list.add(new Integer(y));
       list.add(new Integer(z));
       jsonText = list.toString();
  }
  System.out.print(jsonText);

这样可以输出

[1234,245,10,312,234,122,1234,67788,345,235,001,332]

如何在这样的单个数组中获取这些值?

[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332]]
]我得到了这个问题的答案,需要回答以下问题。

我使用了以下解决方案之一。 感谢你们的回复。

现在我得到了JSON合成嵌套数组,看起来像这样

[
[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332]],
[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332],[1234,67788,3450]],
[[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332],[1234,67788,34534]]]

所以我有一个包含三个数组的大数组(有时可能是2个或三个以上的数组),这三个数组中的每一个都包含一些数组,在上面这个例子中

相反的程序是什么?我的意思是如果我想要这些数组的值。我的表现方式与此相同。使用JSON JSONArray list = new JSONArray(); list.get()这个get方法会给我什么我需要的吗? 我使用了org.json Java API。

感谢朋友们一直帮助我。

3 个答案:

答案 0 :(得分:4)

只需将其放入另一个JSONArray

JSONArray array = new JSONArray();
array.add(list);
String jsonText = array.toString();

更新:根据您的评论:

  

抱歉,输出就是这样的

[1234,245,10,312,234,122,1234,67788,345,235,001,332] 
     

请告诉我们如何获得上述输出

[1234,245,10][312,234,122][1234,67788,345][235,001,332] 

有几种方法:

  1. 连接到jsonString

    String jsonText = ""; // Start with empty string.
    for (int j = 0; j < 4; j++) {
        JSONArray list = new JSONArray(); // Create new on each iteration.
        list.add(new Integer(x));
        list.add(new Integer(y));
        list.add(new Integer(z));
        jsonText += list.toString(); // += concatenates to existing string.
    }
    System.out.print(jsonText);
    
  2. 由于字符串在循环中使用+=连接是内存占用和缓慢,而是使用StringBuilder

    StringBuilder jsonText = new StringBuilder();
    for (int j = 0; j < 4; j++) {
        JSONArray list = new JSONArray();
        list.add(new Integer(x));
        list.add(new Integer(y));
        list.add(new Integer(z));
        jsonText.append(list.toString();
    }
    System.out.print(jsonText.toString());
    

答案 1 :(得分:2)

我怀疑你想要的是一个语法正确的嵌套整数数组的JSON数组(原始帖子请求无效的JSON)。如果没有,请使用@BalusC's answer

要获取包含子数组的数组,只需将子数组创建为int[]数组,然后将它们直接添加到主JSONArray

public int[] getThreeValues() { // example
    Random r = new Random();
    return new int[] { r.nextInt(100), r.nextInt(100), r.nextInt(100) };
}

public void execute() {

    JSONArray master = new JSONArray();

    for (int j=0; j<4; j++) {
        master.put(getThreeValues());
    }

    System.out.println(master);
}

<强>结果:

[[3,13,37],[24,4,64],[61,2,1],[97,13,86]]

注意:我不确定您使用的是哪个JSON库,因此我使用org.json Java API,它使用put(...)而不是add(...)。此外,该特定库支持将int []数组直接添加到JSONArray - 您可能不会,在这种情况下,您需要构建嵌套的JSONArrays并将它们添加到主服务器。

答案 2 :(得分:0)

您始终可以将列表放在JSONArray

e.g。

   JSONArray list = new JSONArray();
   String jsonText = null;
   for (int j = 0; j < 4; j++) {
       list.add(new Integer(x));
       list.add(new Integer(y));
       list.add(new Integer(z));
  }

  JSONArray finalList = new JSONArray();
  finalList.put(0, list);
  jsonText = finaList.toString();
  System.out.print(jsonText);

或(根本不推荐)破解你的输出,

e.g。

jsonText += "[" + jsonText + "]";
System.out.print(jsonText);