JSON到JSON转换器

时间:2012-10-25 12:10:36

标签: java json xslt jackson

我有一个场景。

必需的输入和输出是JSON。

// Input
{
  "OldObject": {
    "Time": 1351160457922,
    "Name": "OName",
    "quantity": 100,
    "price": 10
  }
}


// Output
{
  "NewObject": {
    "Time": 1351160457922,
    "Title": "OName",
    "quantity": 100
  }
}

我需要一些转换代码或最好是xslt类型语言来将json从一种格式转换为另一种格式。这个变压器也需要快速,因为转换将在运行中完成。

修改
我没有接收到的INPUT对象的定义,它可能在运行时更改。但如果需要,我可以使用OUTPUT对象的类。 我试图这样做 json - > xml - > xslt - > xml - > json ,但此时每秒收到大约1000个对象,这个过程可能会产生开销 我不能使用JavaScript,因为myApp是简单的基于Windows的java应用程序,使用JavaScript可能会导致开销。

7 个答案:

答案 0 :(得分:19)

试试JOLT。它是用Java编写的JSON to JSON转换库。它是在一个项目中创建的,该项目将大量JSON从ElasticSearch“后端”转换为前端api。

对于您在问题中列出的JSON转换,Jolt“shift”规范将是:

// Jolt "shift" spec
{
    "OldObject": {
        "Time": "NewObject.Time",   
        "Name": "NewObject.Title", // if the input has "OldObject.Name", copy it's value
                                   // to "NewObject.Title
        "quantity": "NewObject.quantity"
    }
}

答案 1 :(得分:10)

您可以使用JSON patch进行转换。

jsonpatch-js示例:

var transformations = [
  { move: '/OldObject', to: '/NewObject' },
  { remove: '/NewObject/price' },
  { move: '/NewObject/Name', to: '/NewObject/Title' }
];

var oldObject = { "OldObject": { "Time": 1351160457922, "Name": "OName", "quantity": 100, "price": 10 } };

jsonpatch.apply(oldObject, transformations);

我没有对此进行测试,但应该像这样工作。

答案 2 :(得分:5)

您可以使用ZORBA和JsonIQ http://www.jsoniq.org/ 但是,它是一个本机库,它带有一个包装器,因此您可以在java中使用它。

答案 3 :(得分:1)

答案 4 :(得分:1)

另一个选择是使用Logz.io Sawmill库。您定义管道并执行它。例如:

{
  steps: [
    {
      rename {
         config {
            from: "OldObject"
            to: "NewObject"
         }
      }
    }

    {
      removeField {
        config {
          path: "NewObject.price"
        }
      }
    }

    {
      rename {
        config {
          from: "NewObject.Name"
          to: "NewObject.Title"
        }
      }
    }
  ]
}

答案 5 :(得分:1)

您可以尝试jmom一个小的Java库

String jsonstring = "...";
JsonValue json = JsonParser.parse(jsonstring);
Jmom jmom = Jmom.instance()
            .copy("/OldObject", "/NewObject", true)
            .remove("/NewObject/price")
            .copy("/NewObject/Name", "/NewObject/Title", true);
jmom.apply(json);
jsonstring = json.toCompactString();

答案 6 :(得分:0)

您可以尝试Java库Silencio,它允许您将JSON文件的每个节点转换为新值。您可以决定转换节点的方式和方式。