Json的展平和展平是什么意思?我们还可以使用ObjectMapper类反序列化扁平化的json属性吗?

时间:2018-08-24 12:20:12

标签: java json-deserialization json-serialization

我正在尝试弄清楚平展Json和平展Json到底是什么。任何链接或博客都将有所帮助。

也没有其他问题,我正在尝试将扁平化的json属性反序列化为objectmapper对象。我正在尝试的Json具有以下格式。

{
  "MyUserID": "45345dfsf4545",
  "attributes": {
    "ArrayAttribute1[0].alertMessage": "You have consumed all of your data allowance",
    "ArrayAttribute1[0].promoName": "MyPromoTest",
    "ArrayAttribute2[0].showmorepromosbutton": "true",
    "ArrayAttribute1[0].promoPrice": "P 149.00",
    "userType": 1,
    "Attribute1": "Jan 28 2016 . 3:09PM",
    "Attribute1": "true",
    "Attribute2.validityColor": "RED",
    "Attribute2.subscriberBal": "P 29.5",
    }
}

2 个答案:

答案 0 :(得分:0)

找到了这个存储库(https://github.com/wnameless/json-flattener)来展平和取消展平json。确保先将其展开为字符串,然后再将其提供给ObjectMapper。不幸的是,没有找到定义差异的规范。

答案 1 :(得分:0)

  • 平化意味着将JSON对象放入一个类似单层结构的结构(也称为平面结构),即没有子对象或父对象,所有都是键值对。嵌套对象可通过点运算符访问。 相反,非扁平化是指将扁平化结构放入存在父子结构的Mutli级结构中。

  • 您需要将未展平的结构传递给Object-mapper以便反序列化。

以下示例将有助于更好地理解它

嵌套的JSON对象

{ "a":
  { "b": 1,
    "c": null,
    "d": [false, true]
  },
  "e": "f",
  "g": 2.3
}

平整的JSON

{ "a.b": 1,
  "a.c": null,
  "a.d[0]": false,
  "a.d[1]": true,
  "e": "f",
  "g": 2.3
}

Java Map像扁平化的JSON

  {a.b=1, a.c=null, a.d[0]=false, a.d[1]=true, e=f, g=2.3}

为什么需要展平? 如果您没有JSON Object的内部结构,那么访问其中的所有元素将非常麻烦,因此简单的解决方案是将所有内容置于同一级别,并且点运算符描述了Objects的深度。 因此,展平使其更易于访问内部元素。

串行化和反串行化只能在未扩展的JSON上进行。