JSON to JSON使用任何现有的Java库/工具转换输入样本

时间:2017-04-21 07:03:50

标签: java json jackson jolt json-patch

输入:

import gym
env = gym.make("CartPole-v0")
env.reset()
img = env.render(mode='rgb_array', close=True) # Returns None
print(img)
img = env.render(mode='rgb_array', close=False) 
          # Opens annoying window, but gives me the array that I want
print(img.shape)

需要输出:

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

3 个答案:

答案 0 :(得分: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"
        }
    ]

 }

答案 1 :(得分: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"
        }
      }
    }
  }
]

答案 2 :(得分:0)

如果我们假设像其他受访者一样,通过键/值对象的数组来使输出成为有效的JSON,则使用JSLT很容易解决。

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

{"Student" : array(.Student)}