【问题标题】:Mapping dynamic nosql document to java object将动态 nosql 文档映射到 java 对象
【发布时间】:2023-04-02 22:41:01
【问题描述】:

我有以下 JSON

{
  "id":"wer_ereeyudhk567",
  "product":"Phone",
  "details": {
               "name" :"Nexsus 6",
               "cpu": "quadCore",
               "ram": "3 gb"
             }
}

并且需要映射到java对象,但是“details”对象会根据产品不断变化,比如如果产品是“tablet”,“details”中的字段数会有所不同。我该如何建模这种类型字段数量可以是动态的并且取决于“产品”的数据?在像javascript这样松散类型的语言中,您可以动态地将字段添加到对象。有没有办法可以动态地将属性/字段添加到java对象?

【问题讨论】:

    标签: java json jackson nosql


    【解决方案1】:

    您可以通过 Map 获取详细信息以解决动态数据案例。

    public class Product {
        private String id;
        private String product;
        private Map<String, Object> details;
    }
    

    使用:

    String json = "{  'id':'wer_ereeyudhk567',  'product':'Phone',  'details': {  'name' :'Nexsus 6',  'cpu': 'quadCore',  'ram': '3 gb', 'isNew': true, 'quantity': 100}}";
    Product product = new Gson().fromJson(json, Product.class);
    
    System.out.println(product.getDetails());
    

    【讨论】:

    • 感谢您的回复,但如果我使用 Map 那么我会将所有值转换为字符串,我会丢失数据类型信息 { 数字、布尔等}。我也可以解决存储类型的问题吗?谢谢
    • 当然,您可以通过 Map 更改 Map 并根据需要转换值。我将为您编辑答案。
    【解决方案2】:

    动态nosql文档的Java模型[产品文档]

    public class Product {
        private String id;
        private String product;
        private Map<String, Object> details; //details might contains another objects
    }
    

    Jackson http://jackson.codehaus.org/ 是一个高性能 JSON 处理器 Java 库,用于将 Java 对象与 JSON 进行转换。

    将您的 JSON 转换为 java 对象,反之亦然:

    //1. Convert JSON to Java object
    ObjectMapper mapper = new ObjectMapper();
    Product productObject = mapper.readValue(JSONSource, Product.class); //JSONSource may be file or String
    System.out.println(productObject.getXXX());
    
    //2. Convert Java object to JSON format
    ObjectMapper mapper = new ObjectMapper();
    mapper.writeValue(JSONSource, productObject);
    

    【讨论】:

    • 感谢您的回复,但我再次不知道对象中的内容是简单的数据类型,如字符串、数字、布尔值还是复杂的类型,如另一个嵌套 JSON。有没有办法存储类型信息,这将有助于转换回 java 对象。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2019-07-26
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多