我有一个JSON字符串,我想在其中获取嵌套在多个对象中的一个字段的值。我怎样才能以一种出色而高效的方式获得该领域?这是我到目前为止尝试过的代码。它正在工作,但是代码很长。我正在寻找更好的解决方案。
Json响应
function checkCookieMiddleware(req, res, next) {
const req_cookies = cookie.parse(req.headers.cookie || '');
if(req_cookies.type){
if(req_cookies.type === "X"){
express.static(basePath + "/client/x");
}
else if(req_cookies.type === "Y"){
express.static(basePath + "/client/y");
}
else {
next();
}
}
else {
next();
}
}
app.use(checkCookieMiddleware, express.static(basePath + "/client/z"));
冗长的代码:
{
"status":"success",
"response":{
"setId":1,
"response":{
"match":{
"matches":{
"matchesSchema":{
"rules":[
{
"ruleId":"Abs"
}
]
}
}
}
}
}
结果是
JsonParser jp=new JsonParser();
Object obj = jp.parse(JSONString);
JSONObject jsonObject =(JSONObject) (obj);
JSONObject get1 = jsonObject.getJSONObject("response");
JSONObject get2 = get1 .getJSONObject("response");
JSONObject get3 = get2 .getJSONObject("match");
JSONObject get4 = get3 .getJSONObject("matches");
JSONObject get5 = get4 .getJSONObject("matchesSchema");
JSONObject get6 = get5 .getJSONObject("rules");
JSONArray result = get6 .getJSONArray("rules");
JSONObject result1 = result.getJSONObject(0);
String lat = result1 .getString("rule");
从嵌套的json对象(类似ruleId = Abs
之类的ruleId
中提取是一个很好的选择
答案 0 :(得分:1)
您可以将Jackson的JsonNode
与JsonPath结合使用,以获取ruleId
,如下所示:
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonObj = mapper.readTree(JSONString);
String lat = jsonObj.at("/response/response/match/matches/matchesSchema/rules/0/ruleId").asText()
它也是null
安全的,并且在空节点上返回MissingNode
对象,当您执行.asText()
时会返回空字符串
答案 1 :(得分:1)
使用JsonPath超级简单。
String ruleId = JsonPath.read(jsonString, "$.response.response.match.matches.matchesSchema.rules[0].ruleId");
或者,如果您多次读取路径,最好预先编译JsonPath表达式
JsonPath ruleIdPath = JsonPath.compile("$.response.response.match.matches.matchesSchema.rules[0].ruleId");
String ruleId = ruleIdPath.read(json);