【问题标题】:JSON for Java, Encode a JSON array - StreamingJSON for Java,编码 JSON 数组 - 流式传输
【发布时间】:2010-09-13 11:51:23
【问题描述】:

[我有一些代码可以创建一个 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 列表 = 新 JSONArray(); list.get() 这个 get 方法会给我我需要什么? 我使用了 org.json Java API。

感谢朋友们一直以来的帮助。

【问题讨论】:

  • 最后一行(示例输出)对吗?
  • 对不起,输出是这样的 [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,245,10],[312,234,122],[1234,67788,345],[235,001,332]](即嵌套数组的数组)而不是[1234,245,10][312,234,122][1234,67788,345][235,001,332](即看起来像没有任何分隔的数组的字符串)。第二个实际上没有意义,因为它不是正确的 JSON,除非你将它包装在 " 引号中,然后它将是一个字符串,而不是一系列可由 JSON 解析的数组。
  • 是的,你是对的@Chadwick 它应该是这样的。 [[1234,245,10],[312,234,122],[1234,67788,345],[235,001,332]],应该是数组而不是字符串,谢谢指点我的错误
  • 很高兴您得到了适合您的答案,但不要为了添加另一个问题而编辑问题。创建一个新问题(或搜索以查看它是否已经被问过) - 只要你不问同样的问题,如果它与这个问题相反就可以!你甚至可以明确地参考这个问题来展示一些背景。

标签: java json


【解决方案1】:

只需将其放入另一个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());
    

【讨论】:

  • 我得到了两个答案。我有两种不同的方法,一种是连接数组,另一种是嵌套数组。所以我得到了你的解决方案和@chadwick 的解决方案。谢谢各位大神回复。感谢您的帮助。
  • 这是一个使用人类逻辑思维能力的问题。但是很遗憾,您最初的问题完全错误。
  • 是的,我同意你的观点,但正如我所说,我必须同时使用 urs 和 @Chadwick 的答案。但这是我的错误,我应该要求两个 aproches。您的回答对我正在寻找的名称字符串有帮助。
【解决方案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 - 您的可能不支持,在这种情况下,您需要构建嵌套的 JSONArray 并将它们添加到您的主库。

【讨论】:

    【解决方案3】:

    您总是可以将列表放在 JSONArray 中

    例如

       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);
    

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

    例如

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      相关资源
      最近更新 更多