我使用以下库来解析对象:
{"name": "web", "services": []}
以下代码
import com.json.parsers.JSONParser;
JSONParser parser = new JSONParser();
Object obj = parser.parseJson(stringJson);
当数组服务为空时,它会显示以下错误
@Key-Heirarchy::root/services[0]/ @Key:: Value is expected but found empty...@Position::29
如果数组服务有一个元素,一切正常
{"name": "web", "services": ["one"]}
我该如何解决这个问题?
由于
答案 0 :(得分:1)
尝试使用org.json.simple.parser.JSONParser
像这样:
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(stringJson);
现在要访问这些字段,您可以这样做:
JSONObject name = jsonObject.get("name"); //gives you 'web'
services
是一个JSONArray,所以在JSONArray中获取它。像这样:
JSONArray services = jsonObject.get("services");
现在,您也可以遍历此services
JSONArray。
Iterator<JSONObject> iterator = services.iterator();
// iterate through json array
while (iterator.hasNext()) {
// do something. Fetch fields in services array.
}
希望这可以解决您的问题。
答案 1 :(得分:0)
为什么需要解析器? 试试这个: -
String stringJson = "{\"name\": \"web\", \"services\": []}";
JSONObject obj = JSONObject.fromObject(stringJson);
System.out.println(obj);
System.out.println(obj.get("name"));
System.out.println(obj.get("services"));
JSONArray arr = obj.getJSONArray("services");
System.out.println(arr.size());
答案 2 :(得分:0)
我用https://github.com/ralfstx/minimal-json
解决问题阅读JSON
从Reader或String中读取JSON对象或数组:
JsonObject jsonObject = JsonObject.readFrom( jsonString );
JsonArray jsonArray = JsonArray.readFrom( jsonReader );
访问JSON对象的内容:
String name = jsonObject.get( "name" ).asString();
int age = jsonObject.get( "age" ).asInt(); // asLong(), asFloat(), asDouble(), ...
访问JSON数组的内容:
String name = jsonArray.get( 0 ).asString();
int age = jsonArray.get( 1 ).asInt(); // asLong(), asFloat(), asDouble(), ...