1

输入:

 {
   "Student": {
      "name" :"abc",
      "id"   : 588, 
      "class : "12"
   }
 } 

所需输出:

 {
   "Student": {

      "key" :"name",
      "value":"abc",

      "key" :"id",
      "value":"588",

      "key" :"class",
      "value":"12"
   }
 } 
4

3 回答 3

2

您的输出 json 无效。Json 对象不能重复键。

您可以使用该库org.json并执行以下操作:

    JSONObject jsonObject = new JSONObject(inputJson);
    JSONObject outputJson = new JSONObject();
    JSONArray array = new JSONArray();

    for (Object key : jsonObject.keySet()) {
       JSONObject item = new JSONObject();

       String keyStr = (String)key;
       Object keyvalue = jsonObj.get(keyStr);
       item.put(keyStr, keyvalue);
       array.put(item);

    }
    outputJson.put("Student", array);
    System.out.println(json.toString());

输出 :

 {
    "Student": [

        {
            "key": "name",
            "value": "abc"
        },

        {
            "key": "id",
            "value": "588"
        },
        {
            "key": "class",
            "value": "12"
        }
    ]

 }
于 2017-04-21T07:32:35.047 回答
0

与其他答案类似,所需的输出 JSON 格式无效。

最接近的有效输出将是

{
  "Student" : [ {
    "key" : "name",
    "value" : "abc"
  }, {
    "key" : "id",
    "value" : 588
  }, {
    "key" : "class",
    "value" : "12"
  } ]
}

这可以通过具有以下规范的 Jolt 生成

[
  {
    "operation": "shift",
    "spec": {
      "Student": {
        "name": {
          "$": "Student[0].key",
          "@": "Student[0].value"
        },
        "id": {
          "$": "Student[1].key",
          "@": "Student[1].value"
        },
        "class": {
          "$": "Student[2].key",
          "@": "Student[2].value"
        }
      }
    }
  }
]
于 2017-04-24T13:46:31.997 回答
0

如果我们假设输出是有效的 JSON,通过像其他受访者那样制作一个键/值对象数组,这很容易用JSLT解决。

array函数完全按照您的要求将对象转换为键/值对象数组,因此转换变为:

{"Student" : array(.Student)}
于 2018-10-11T10:13:57.233 回答