首页 > 解决方案 > JSON从数组解析数组(JAVA)

问题描述

我有一个包含 JSON 文件信息的字符串。

    static String JSON_STRING2 ="{\"lex\": {\"seg\": [ [ 0, 8 ], [ 9, 5 ], [ 15, 6 ] ], \"s\": [ [ 0, 21 ] ], \"p\": [ [ 0, 21 ] ]}, \"morphology\": { \"msd\": [ [ [ \"red\", \"Agpmsnn\" ], [ \"red\", \"Agpfpan\" ], [ \"red\", \"Agpmsvn\" ] ], [ [ \"flower\", \"Ncfsgn-\" ], [ \"flower\", \"Ncfpnn-\" ], [ \"flower\", \"Ncfpvn-\" ] ], [ [ \"blossom\", \"Ncmsnn-\" ] ] ], \"stem\": [ \"rr\", \"ff\", \"bb\" ]}}";

我想要做的是将这些数据保存到数组中以进行进一步的字符串比较任务,但目前我不知道如何到达“seg”层的底层并能够以 [0,8] 为例值按其在数组中的位置。据我所知,通过 get() 获取整个 Array 元素。我尝试循环数据,但大多数时候我以错误的数组或数组列表类型告终。

我的预览代码:

public static void main(String[] args) {

    // Create root JSON Object
    JSONObject object = new JSONObject(JSON_STRING2);
    System.out.println("--------------------------------");

    // Get Data Values
    JSONObject LEX = object.getJSONObject("lex");

    System.out.println("------------- Data Values ---------------");

    System.out.println("Array Words : " + LEX.getJSONArray("seg").get(1));
    System.out.println("Array Sentences : " + LEX.getJSONArray("s"));
    System.out.println("Array Paragraphs : " + LEX.getJSONArray("p"));
    System.out.println("--------------------------------");

    // Get Data Values
    JSONObject MORP = object.getJSONObject("morphology");
    System.out.println("------------- Data Values ---------------");
    System.out.println("Array wordCharacteristic : " + MORP.getJSONArray("msd"));}

任何提示或技巧?我在这里阅读了大量文章,其中没有一篇文章将熟悉的数据解析为我的。谢谢。

标签: javaarraysjsonarraylist

解决方案


首先,注意它JSONArray是 0 索引的,就像 java 中的数组和列表一样。所以LEX.getJSONArray("seg").get(1)返回第二个项目seg,从而打印[9,5]

如果你想要第一个,只需使用LEX.getJSONArray("seg").get(0).

现在您可以迭代那些 JSONArray。有很多方法可以做到这一点,这是一种可能性:

    for (Object seg : LEX.getJSONArray("seg")) {
        JSONArray values = (JSONArray) seg;
        for (Object objValue : values) {
            int value = (int) objValue;
            System.out.print(value + " ");
        }
        System.out.println();
    }

将打印出来:

0 8
9 5
15 6

推荐阅读