【问题标题】:parsing nested json using jackson spring API [duplicate]使用jackson spring API解析嵌套的json [重复]
【发布时间】:2017-01-04 20:55:19
【问题描述】:

我可以用ObjectMapper 类解析嵌套的 json 字符串。这里的问题是解析嵌套的 json 变得越来越困难,因为我必须编写大量样板代码来实现将 json 解析为 java 对象的最终结果。除了这种方式,spring还有什么更好的解析方式吗?

领域类:

组件类

public class Components {

    private String name;

    private String url;

    private List<Properties> properties;

    // getters and setters
}

属性类:

public class Properties {

    private String name;

    private String value;

    private boolean exclusions;

    // getters and setters

} 

控制器类:

@RestController
public class TempController {

    String jsonResponse = null;

    @RequestMapping("/")
    public @ResponseBody String getResponse(){
        JsonreadApplication ja = new JsonreadApplication();
        jsonResponse = ja.readJsonFile();
        //System.out.println(jsonResponse);
        return jsonResponse;
    }

    @RequestMapping("/temp")
    public @ResponseBody String getTempByServerType(String jsonResponse){
        jsonResponse = getResponse();
        Components components = new Components();
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Iterator<Entry<String, JsonNode>> fieldNames = objectMapper.readTree(jsonResponse).fields();
            while(fieldNames.hasNext()){
                System.out.println(fieldNames.next());
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return "I've parsed json!";
    }
}

json 文件:

{
    "name": "CatalogTools",
    "url": "/atg/commerce/catalog/CatalogTools/",
    "properties": [
        {
            "name": "queryASAFFabrics",
            "value": "skuType=\"ASAF_FABRIC\" AND NOT basicColor IS NULL ORDER BY dynamicAttributes.fabricpriceband, basicColor, dynamicAttributes.fabrictype, dynamicAttributes.asafpattern, dynamicAttributes.asaffabricbrand",
            "exclusions": "false"
        },
        {
            "name": "loggingDebug",
            "value": "true",
            "exclusions": "false"
        }
    ]
}

如前所述,可以使用 ObjectMapper 实例进行解析,但需要使用大量样板代码和硬编码 json 元素名称。有没有更好的方法来做到这一点?我正在使用jackson 库来解析 json 文件。

我在网上引用了许多链接,其中@RequestBody 注释用于HTTP POST 操作。在这里,它是一个HTTP GET 请求。

非常感谢任何帮助。

非常感谢。

【问题讨论】:

  • 你试过public @ResponseBody String getTempByServerType(@RequestBody Components components)吗?
  • @RequestBody 注解仅用于 http POST 操作。在这里,我正在使用 GET 操作,我找不到适合我的问题的链接。如果您能将回答此问题的参考链接传递给我,那就太好了。
  • 您应该在 GET 请求中发送复杂的 JSON(或任何 JSON)作为查询参数。主要原因:URLs are limited in size。但是,如果您绝对必须,您是否尝试过readValue() 而不是readTree()
  • 对不起,我是 spring 新手。我没有将参数作为 url 传递给 getTempByServerType,而是作为字符串传递。如果需要,我可以删除它,因为我已经在全局声明了变量 jsonResponse。除了大小之外我不应该发送复杂 json 的任何其他原因?
  • @Andreas,感谢您的回答,是的。我可以在 ObjectMapper 实例中尝试其他可能的方法,但是有没有办法通过使用更少代码的 spring-jackson API 来跳过它?再次感谢。

标签: java json spring spring-boot jackson


【解决方案1】:

您可以使用jsonchema2pojo

将 json 的示例放在那里,将“Source Type”设置为 JSON,将 Annotation style 选择为 Jackson 2.x 或 1.x,然后单击“Zip”。瞧,整个模型都生成了!

【讨论】:

  • 非常感谢您回答这个问题。这真的很酷。你有一些 Spring API 的示例代码 sn-ps 吗?
  • @harshavmb 我没有。
  • 没有问题。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多