Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析可能包含JsonArray或仅包含JsonObject的Json字符串_Java_Json - Fatal编程技术网

Java 解析可能包含JsonArray或仅包含JsonObject的Json字符串

Java 解析可能包含JsonArray或仅包含JsonObject的Json字符串,java,json,Java,Json,我的Json字符串可以是以下两种格式之一,我想知道如何解析它们,因为我不知道它是JsonArray还是JsonObject {"a":{"a":"a","a":"a","a":"a","a":"a"}} {"a":[{"a":"a","b":"a","a":"a","a":"a"},{"b":"b","b":"b","b":"b","b":"b"}]} 谢谢。示例代码让您了解如何解析令牌流 这是用初始标记调用的 nextToken(t)从流中检索下一个令牌 parseJsonElement是

我的Json字符串可以是以下两种格式之一,我想知道如何解析它们,因为我不知道它是JsonArray还是JsonObject

{"a":{"a":"a","a":"a","a":"a","a":"a"}}

{"a":[{"a":"a","b":"a","a":"a","a":"a"},{"b":"b","b":"b","b":"b","b":"b"}]}

谢谢。

示例代码让您了解如何解析令牌流

这是用初始标记调用的

nextToken(t)从流中检索下一个令牌

parseJsonElement是递归的,用于处理树的性质

public Object parseJsonElement(Token t){
    if (t.isArrayStart()){
       // is an array so create list and put child elements into list
        List list = new List();
        t = nextToken(t);
        while (!t.isArrayEnd()){
           list.add(parseJsonElement(t));
        }
        return list;
    }else if (t.isObjectStart()){
       // is an object so return parsed object
        return parseJsonElement(t);
    }else // handle something else
}
假设您正在使用解析JSON,请构造一个。其
parse
方法的返回类型为。通过阅读类的方法列表可以看到,它有方法来告诉您它是对象、数组还是其他。然后,您可以将对象分为适当的子类(
JsonObject
JsonArray
,无论什么),或者使用提供的方便方法为您执行此操作


从那里,您可以检查对象或数组并获取属性、元素、基元值等。这些也将作为JsonElement显示。

如果您使用JSONLib或Gson,则两个库都有一个名为JsonElement的抽象类。如果该类是JsonObject或JsonArray(#isJsonArray()#isJsonObject()方法),则该类能够回答您的问题。然后,你可以正确地投下它