【问题标题】:Get a String[][] array from a JSON response从 JSON 响应中获取 String[][] 数组
【发布时间】:2012-06-15 15:48:46
【问题描述】:

我从服务器收到以下 JSON 响应...

[["1","1"],["2","1"],["3","1"],["4","1"],["5","1"],["6","1"],["7","1"],["8","1"],["9","2"],["10","3"],["11","3"],["12","3"],["13","3"],["14","3"],["15","3"],["16","3"],["17","3"],["18","3"],["19","3"]]

它是 JSON 格式,我得到它是 String[],类似这样...

String response = Response.getValue();
System.out.println(response) = [["1","1"],["2","1"],["3","1"],["4","1"],["5","1"],["6","1"],["7","1"],["8","1"],["9","2"],["10","3"],["11","3"],["12","3"],["13","3"],["14","3"],["15","3"],["16","3"],["17","3"],["18","3"],["19","3"]]

但是,响应是 2 个值 [USU_ID, DEPARTMENT] 的矩阵,我需要在 String[][] 中使用它。我怎样才能做到这一点?我尝试使用StringTokenizer,但效果不佳。

这是我写的代码……

public static String[][] Json2Matrix(String jsonStringArray) {
        int i = 0;
        int j = 0;

        String[][] mstrJsonString = null;
        StringTokenizer tokElementos, tokSubelementos, tokTemp;
        //jsonArray = "[["a","b"],["c","d"],["e","f"]]";
        //jsonStringArray = jsonStringArray.replace("\"", "");
        //jsonArray = "[[a,b],[c,d],[e,f]]";
        jsonStringArray = jsonStringArray.substring(1, jsonStringArray.length() - 2);
        //jsonArray = "[a,b],[c,d],[e,f]";/

        //System.out.println(jsonStringArray);

        //JSONSerializer.toJSON(jsonStringArray);

        //System.out.println(jsonArray.toString());

        //<editor-fold defaultstate="collapsed" desc="Prueba">
        tokElementos = new StringTokenizer(jsonStringArray, "[]");

        tokTemp = tokElementos;
        tokSubelementos = new StringTokenizer(tokTemp.nextToken(), ",");

        //System.out.println(tokElementos.countTokens());

        //System.out.println(tokElementos.nextToken());

        //System.out.println(tokSubelementos.countTokens()/2);

        mstrJsonString = new String[tokElementos.countTokens()][tokSubelementos.countTokens()];

        while (tokElementos.hasMoreTokens()) {
            tokSubelementos = new StringTokenizer(tokElementos.nextToken(), ",");
            j = 0;
            while (tokSubelementos.hasMoreTokens()) {

                mstrJsonString[i][j] = tokSubelementos.nextToken();
                System.out.println(i + "," + j + " " + mstrJsonString[i][j]);
                j++;
            }
            i++;

        }
        //</editor-fold>
        return mstrJsonString;
    }

我得到这个作为输出......

run:
1,0 "2"
1,1 "1"
3,0 "3"
3,1 "1"
5,0 "4"
5,1 "1"
7,0 "5"
7,1 "1"
9,0 "6"
9,1 "1"
11,0 "7"
11,1 "1"
13,0 "8"
13,1 "1"
15,0 "9"
15,1 "2"
17,0 "10"
17,1 "3"
19,0 "11"
19,1 "3"
21,0 "12"
21,1 "3"
23,0 "13"
23,1 "3"
25,0 "14"
25,1 "3"
27,0 "15"
27,1 "3"
29,0 "16"
29,1 "3"
31,0 "17"
31,1 "3"
33,0 "18"
33,1 "3"
35,0 "19"
35,1 "3"

它得到正确的值,但不正确的索引。有人可以帮我纠正这个问题。

【问题讨论】:

  • 对不起,你想写自己的json解析器吗?为什么不使用code.google.com/p/google-gson
  • String[][] nuevo = JsonParser.fromJson(jsonStringArray, String[][].class);那是我的解决方案....哦,上帝,为我的愚蠢问题道歉...我在这方面非常初级。谢谢卢卡斯:)
  • 在 C# 中我会说你正在反序列化一个 List> 如果这有帮助的话......

标签: java json string


【解决方案1】:

使用 JSON 解析器比自己编写原始解析器节省大量精力。

我使用过这些基于 Java 的 JSON 解析器:

  1. 杰克逊 [http://jackson.codehaus.org/]
  2. Google 的 GSON [http://code.google.com/p/google-gson/]

我推荐 Google 的 GSON 为:

  1. 您可以将 json 字符串序列化/反序列化为 Java 对象 [POJO],无需注释 [使用变量名]。
  2. 可以轻松序列化/反序列化深层对象层次结构。
  3. 它对 Java 泛型提供了不错的支持

【讨论】:

    【解决方案2】:

    http://json.org/java/

    希望这会有所帮助,几个月前我在使用它来使用 JSON 和 java,它工作得非常好(*也在使用 netbeans)

    【讨论】:

      猜你喜欢
      • 2016-03-23
      • 1970-01-01
      • 2017-07-02
      • 2022-06-28
      • 1970-01-01
      • 2017-07-17
      • 2015-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多