如何使用外部映射将json转换为json

时间:2019-12-04 10:30:51

标签: java json spring jackson jackson-databind

我们正在java服务器中调用一个API,该API返回json。 现在我们要将此json转换为另一个json。但是我们希望将转换映射放在一个单独的文件中。 例如,


Json A:
       {
         "json_id":"3",
         "json_another_id":"43",
         "code":34,
        "json_name":"Yey"
       }

To convert into Json B:

  {
     "id":"3",
     "another_id":"43",
     "code":34,
     "name":"Yeyproto"
  }

下面是我希望它出现在单独文件中的映射:

"json_id" -> "id"
"json_another_id" -> "another_id"
"json_name" -> "name"

请让我知道一个好的解决方案。我已经检查过杰克逊mixin,但是它可以从json转换为pojo

2 个答案:

答案 0 :(得分:0)

尝试JOLT。它是用Java编写的JSON到JSON转换库,其中转换的“规范”本身就是JSON文档。它是在一个项目中创建的,该项目将许多JSON从ElasticSearch“后端”转换为前端api。

答案 1 :(得分:0)

Jolt是Java中从JSON到JSON转换的一种流行工具。您可以使用给定的 Jolt Spec 如下实现该目标:

震动规格

[
  {
    "operation": "shift",
    "spec": {
      "@json_id": "id",
      "@json_another_id": "another_id",
      "@code": "code",
      "@json_name": "name"
    }
  }
]

您可以通过Jolt Transform Demo进行验证,以放入原始JSON字符串和 Jolt Spec ,然后按 Transform 按钮查看结果。以下代码段显示了如何在Java中实现这一目标。

Maven依赖

<dependency>
    <groupId>com.bazaarvoice.jolt</groupId>
    <artifactId>jolt-core</artifactId>
    <version>0.1.0</version>
</dependency>
<dependency>
    <groupId>com.bazaarvoice.jolt</groupId>
    <artifactId>json-utils</artifactId>
    <version>0.1.0</version>
</dependency>

代码段

String spec = "[\r\n" +
        "  {\r\n" +
        "    \"operation\": \"shift\",\r\n" +
        "    \"spec\": {\r\n" +
        "      \"@json_id\": \"id\",\r\n" +
        "      \"@json_another_id\": \"another_id\",\r\n" +
        "      \"@code\": \"code\",\r\n" +
        "      \"@json_name\": \"name\"\r\n" +
        "    }\r\n" +
        "  }\r\n" +
        "]";
Chainr chainr = Chainr.fromSpec(JsonUtils.jsonToList(spec));
Object transformedOutput = chainr.transform(JsonUtils.jsonToObject(jsonStr));
System.out.println(transformedOutput.toString());

控制台输出

  

{id = 3,another_id = 43,code = 34,name = Yey}