繁体   English   中英

如何在 Spring 中解析嵌套的 json

[英]How parse nested json in Spring

我用一堆子对象嵌套了 JSON,但我只需要 response_time 和 question,survey_data 的子问题。 在 spring 中将 rest 控制器中的嵌套 JSON 解析为对象的最佳方法是什么?

{
   "is_test_data":false,
   "language":"English",
   "url_variables":{
      "requestId":{
         "key":"requestId",
         "value":"1"
      }
   },
   "response_time":1114,
   "survey_data":{
      "2":{
         "id":2,
         "type":"parent",
         "question":"For each of the following factors, please rate your recent project",
         "subquestions":{
            "10":{
               "10001":{
                  "id":10001,
                  "type":"MULTI_TEXTBOX",
                  "question":"Overall Quality : Rating",
                  "answer":null,
               }
            }, 
            "11":{
               "10001":{
                  "id":10001,
                  "type":"MULTI_TEXTBOX",               
                  "question":"Achievement of Intended Objectives : Rating",
                  "answer":null
               }
            }
         }
      },
      "33":{
         "id":33,
         "type":"HIDDEN",
         "question":"Submitted",
         "answer_id":0,
      }
   }
}

谢谢你。

您应该做的是使用 json-simple jar 将完整的 json 解析为 jsonObject,它为 json 创建一个类似结构的映射,然后您可以使用我在下面的示例中解释的键简单地从中获取所需的值

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class JsonDeserializer {

public static void main(String[] args) throws Exception {
    File file = new File("test.json");
    InputStream is = new FileInputStream(file);
    StringBuilder textBuilder = new StringBuilder();
    try (Reader reader = new BufferedReader(
            new InputStreamReader(is, Charset.forName(StandardCharsets.UTF_8.name())))) {
        int c = 0;
        while ((c = reader.read()) != -1) {
            textBuilder.append((char) c);
        }
    }
    String jsonTxt = textBuilder.toString();
    Object obj = new JSONParser().parse(jsonTxt);
    JSONObject jo = (JSONObject) obj;

    System.out.println(jo.get("response_time"));

 }

}

JSON 是一种基于文本的轻量级数据通信格式。 对象和数组是 JSON 可以表示的两种结构化类型。 JSONArray 可以从 String 中提取文本并将其转换为类似向量的对象。 JSONArray 的 getString(index) 方法可用于解析嵌套的 JSON 对象。 这是 getJSONString 方法(索引)的辅助方法。 getString() 方法返回一个字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM