当前位置: 首页 > 知识库问答 >
问题:

java中Jackson库解析嵌套JSON数组

益兴生
2023-03-14
{
    "status": {
        "status": 200,
        "msg": "SUCCESS"
     },
    "apicalls": [
        {
            "API": {
                "method": "get",
                "success": "200",
                "baseURL": "http://api.statdns.com/",
                "param1": "google.com/",
                "param2": "cname",
                "continue_on_fail": "1",
                "add_header2": "'Accept', 'application/json'",
                "add_header1": "'Content-Type', 'application/json'",
                "client_id": "101"
            },
            "id": 1385
        }
    ]
 }

我已经编写了糟糕的代码来解析上面的json数组。下面是我使用的代码,

public void parseJSON(String json) {
    try{
    JsonFactory factory = new JsonFactory();
    JsonParser parser;
    parser = factory.createJsonParser(json);
    parser.setCodec(new ObjectMapper()); // to avoid IllegalStateException  
    JsonToken current;
    current = parser.nextToken();
    if (current != JsonToken.START_OBJECT) {
       System.out.println("Error: root should be object: quiting.");
                return;
            }

            while (parser.nextToken() != JsonToken.END_OBJECT) {
                String fieldName = parser.getCurrentName();
                // Move from field name to field value
                current = parser.nextToken();
                if (fieldName.equals("APIcalls")) {
                    JsonNode node = parser.readValueAsTree();
                    JsonNode currentJson = node.findValue("API");
                    System.out.println("Current JSON :: " + currentJson);

                    JsonNode url = currentJson.get("baseURL");
                    JsonNode param1 = currentJson.get("param1");
                    JsonNode param2 = currentJson.get("param2");

                    String baseURL = url.asText();
                    String params1 = param1.asText();
                    String params2 = param2.asText();
                    String uri = baseURL + params1 + params2;
                    System.out.println("URL :: " + uri);

                    initiateRESTCall(uri);

                }
            }
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

有谁能帮助我知道使用Jackson解析JSON吗?我们非常感谢你的帮助。

共有1个答案

冯和硕
2023-03-14

如果您使用的是jackson库,那么您应该这样做:

我使用的是http://api.statdns.com/google.com/CNAME的响应

public void parseJSON(String json) {
JSONObject parse = new JSONObject(data);

        if(parse.get("question") instanceof JSONObject){
            JSONObject questionJson = (JSONObject) parse.get("question"); 
            System.out.println("Name"+questionJson.getString("name"));
            System.out.println("Type"+questionJson.getString("type"));
            System.out.println("Class"+questionJson.getString("class"));

        }
        else if(parse.get("question") instanceof JSONArray){
            JSONArray questionJson = (JSONArray) parse.get("question"); 
            String[] nameAttrib=new String[questionJson.length()];
            String[] typeAttrib=new String[questionJson.length()];
            String[] classAttrib=new String[questionJson.length()];
            for(int i=0;i<questionJson.length();i++){
                JSONObject questionJsonData=(JSONObject)questionJson.get(i);
                nameAttrib[i]=questionJsonData.getString("name");
                typeAttrib[i]=questionJsonData.getString("type");
                classAttrib[i]=questionJsonData.getString("class");
                System.out.println("Name: "+nameAttrib[i]);
                System.out.println("Type: "+typeAttrib[i]);
                System.out.println("Class: "+classAttrib[i]);
            }

        }
        else if (parse.get("question").equals(null)){

            System.out.println("question"+null);
        }
}

这里我只做“问题”,同样,你也可以做其他的,如你提到了http://api.statdns.com/google.com/CNAME的网址,你也可以说“回答”,“权威”。

 类似资料:
  • 下面是一个Java程序,我正在尝试使用org.fasterxml.jackson.core和jackson-databind库以流式方式测试JSON处理。 目标是学习如何处理JSON并捕获我想要的信息。现在,我想要完成的是以下内容: 1)我在这里发布的JSON有很多数据。跟随这个JSON的Java程序是我试图处理这个JSON,特别是,捕获“Part1/MyAnalysis/Matches”下的“n

  • 问题内容: 此JSON输出来自MongoDB聚合查询。我本质上需要将嵌套数据JSON解析为以下’ 和值。 我尝试了5种不同的技术来从中获得所需的信息,但是使用和模块却遇到了问题。 理想情况下,输出将是这样的: 问题答案: 注意:来自MongoDB的JSON响应实际上无效。JSON需要双引号(),而不是单引号()。 我不确定为什么您的响应中有单引号而不是双引号,但是从其外观上,您可以替换它们,然后只

  • 问题内容: 我试图找到一种从的有效载荷中解析嵌套属性的干净方法。 这是有效负载的粗略概括: 我的目标是拥有具有和字段的对象数组。 有人知道干净地解析此内容的好方法吗? 现在,我正在尝试创建一个类,并在其中创建一个用于数据,值,用户等的静态内部类。 我用来呼叫端点。 问题答案: 您需要使用JsonPath库,该库仅允许您选择必填字段,然后可以将原始数据转换为类。解决方案示例如下所示: 上面的代码打印

  • 我能够使用类解析嵌套json字符串。这里的问题是,解析嵌套json变得越来越困难,因为我不得不编写大量样板代码来实现将json解析为java对象的最终结果。在spring中,除了这种方法之外,还有什么更好的解析方法吗? 域类: 组件类 属性类: 控制器类: json文件: 如前所述,解析可以使用实例完成,但要使用大量样板代码和硬编码json元素名。有没有更好的办法?我使用库解析json文件。 我参

  • 问题内容: 我正在尝试解析这种结构:(它使我发疯,并且我尝试了我能想到的一切。但是我不是很有经验) “ topDrop”就像文件名吗?player是一个JSONArray,包含5个播放器JSONObject。但是在JSON术语中,最重要的是什么。我在JSON验证程序上签出有效的凭证,我需要这样的凭证: topDrop作为JSONObject Player,作为JSONArray,并循环遍历数组中的

  • 我已经试过各种方法来解决这个问题了。但没有成功。 我有几节这样的课 在这种情况下,T可以是任何对象,并且应该可以在运行时解析。 Jackson真的无法将json反序列化为泛型类型吗?