我有一个JSON输入,我想将其转换为另一个可以轻松存储在Java POJO中的JSON.对我来说,数组 struct 最合适,因为它可以很容易地构造.

我有一个如下所示的输入JSON:

{
  "rating-1": {
    "min": 1,
    "max": 2
  },
  "rating-2": {
    "min": 3
  }
}

我想将此JSON转换为在创建Java POJO时易于存储的内容:

{
  "Ratings" : [
    {
      "rating": "rating-1",
      "min": 1,
      "max": 2
    },
    "rating-2" : {
      "rating": "rating-2",
      "min" : 3
    }
  ]
}

我能想到的最接近的是以下Jolt规范(请注意,输入JSON inside Rating-*中的几个元素可以为空或空:

[
  {
    "operation": "shift",
    "spec": {
      "rating-*": {
        "$": "Ratings[#0].&1.rating",
        "min": "Ratings[#0].&1.min",
        "max": "Ratings[#0].&1.max"
      }
    }
  }
]

它给出了以下输出JSON:

{
  "Ratings" : [ {
    "rating-1": {
      "rating": "rating-1",
      "min": 1,
      "max": 2
    },
    {
      "rating": "rating-2",
      "min": 3
    }
  } ]
}

问题是这会创建一个额外的键"Rating-1"/"Rating-2",这在为JSON创建Java对象时很麻烦.应该编写什么JSON规范才能将其修改为我预期的输出?

推荐答案

您可以使用此规范:

[
  {
    "operation": "shift",
    "spec": {
      "rating-*": {
        "$": "Ratings[#2].rating",
        "min": "Ratings[#2].&",
        "max": "Ratings[#2].&"
      }
    }
  }
]

关于这一点,你唯一需要注意的是[#2].它可以帮助您实现根级对象的索引.例如,根级别对象中有2个对象,因此其中有索引01.

Json相关问答推荐

筛选JSON数组以使用Jolt仅保留具有最新日期/时间的条目

从Razor Pages的AJAX Json呈现DataTables问题.Net GET

属性错误:';ActivitiesClient';对象没有属性';base_url';

将PostgreSQL转换为JSON对象

使用 jq 从带有转义反斜杠字符的嵌套 JSON 中提取数据

未知的META规范,无法验证.[规范v1.0.1]

Spark-SQL中的from_unixtime函数未能给出正确的输出

Rust实现:高效解析任意大小的JSON数组

jq :当路径可变时更新 json 内容

阅读 JSON 正文 Firebase 云函数

传统编程语言等价于动态 SQL

使用 jq 同时迭代数组

hook到 Decodable.init() 以获得未指定的键?

在PowerShell中按时间戳过滤JSON

如何让 JSON.NET 忽略对象关系?

一起使用 Argparse 和 Json

使用 simplejson 序列化简单类对象的最简单方法?

Android JSON 库的性能和可用性比较

Json.NET 是否缓存类型的序列化信息?

区分字符串和列表的 Pythonic 方式是什么?