从json中获取元素
Posted
技术标签:
【中文标题】从json中获取元素【英文标题】:get elements from json 【发布时间】:2016-02-25 10:32:00 【问题描述】:我想为“in”或“out”元素中的所有元素创建一个 java 列表。
我的 json 字符串:
"in":[
"id":4,"ip":"192.168.0.20","pinSysNo":4,"pinSysName":"pg6","folderName":"gpio4_pg6","alias":"d","direction":"digital_in",
"id":3,"ip":"192.168.0.20","pinSysNo":3,"pinSysName":"pb18","folderName":"gpio3_pb18","alias":"c","direction":"digital_out"
],
"out":[
"id":1,"ip":"192.168.0.20","pinSysNo":1,"pinSysName":"pg3","folderName":"gpio1_pg3","alias":"a","direction":"digital_in",
"id":2,"ip":"192.168.0.20","pinSysNo":2,"pinSysName":"pb16","folderName":"gpio2_pb16","alias":"b","direction":"digital_in"
]
:""
直到现在我都是这样做的:
String message = json.findPath("in").textValue();
但是这种方式只能访问第一层。
我的 json 示例在“in”元素中显示了两个元素。如何获取这些内部“in”元素的列表?
【问题讨论】:
你使用哪个库来解析 json doc? 【参考方案1】:您可以使用库 JSONSimple 来通过以下代码解析您的 JSON 数据:
JSONParser parser = new JSONParser();
JSONObject o = (JSONObject) parser.parse(yourJsonAsString);
JSONArray ins = (JSONArray) o.get("in");
JSONArray outs = (JSONArray) o.get("out");
String firstIpAddress = ((JSONObject) ins.get(0)).get("ip").toString();
【讨论】:
你的意思是这样吗:JSONObject o = (JSONObject) parser.parse(json.asText());我得到一个异常:org.json.simple.parser.ParsException。这是我的 Json 对象:JsonNode json = request().body().asJson(); 我使用您在问题中发布的 JSON 从上面执行了代码,效果很好。我猜,您的 JSON 格式不正确。json.asText()
究竟返回了什么?它是有效的 JSON 吗?【参考方案2】:
感谢您的帮助。我找到了另一种查找所有子元素的方法。 json示例:
"in":[
"id":4,"ip":"192.168.0.20","pinSysNo":4,"pinSysName":"pg6","folderName":"gpio4_pg6","alias":"d","direction":"digital_in",
"id":3,"ip":"192.168.0.20","pinSysNo":3,"pinSysName":"pb18","folderName":"gpio3_pb18","alias":"c","direction":"digital_out"
],
"out":[
"id":1,"ip":"192.168.0.20","pinSysNo":1,"pinSysName":"pg3","folderName":"gpio1_pg3","alias":"a","direction":"digital_in"
,"id":2,"ip":"192.168.0.20","pinSysNo":2,"pinSysName":"pb16","folderName":"gpio2_pb16","alias":"b","direction":"digital_in"
]
我的解决方案:
JsonNode json = request().body().asJson();
Logger.info("JSON : " + json.findPath("in").findPath("id"));
Logger.info("JSON : " + json.findValues("in"));
List<JsonNode> ins = new org.json.simple.JSONArray();
ins = json.findValues("in");
for (final JsonNode objNode : ins)
for (final JsonNode element : objNode)
Logger.info(">>>>>" + element.findPath("id"));
//create my object for database
现在我可以为数据库创建对象了。 @eztam 谢谢你
【讨论】:
以上是关于从json中获取元素的主要内容,如果未能解决你的问题,请参考以下文章
在greenplum pxf外部表中,从对象的json数组中获取元素时获取空字符串
如何从 GraphQL API 调用中获取 JSON 对象元素? [关闭]