我正在用 Java 编写一个程序,我需要在其中编辑 JSON 输入,然后通过 POST 将其重新提交到不同的系统。在我的代码中,我使用了一个具有键值对的 HashMap,在其中我将 JSONArray 更新为新的视频类型。该代码似乎工作正常,但我的代码输出不同的顺序,我不知道为什么。
当我使用我的 Java 代码处理 JSON 代码时,输出如下所示:
{
"TransformType": {
"encodeOptions": [
{
"types": [
"MPEG"
],
"title": "Convert to MPEG"
}
],
"processType": "encode"
}
}
系统期望的输出如下所示:
{
"TransformType": {
"processType": "encode",
"encodeOptions": [
{
"types": [
"MPEG"
],
"title": "Convert to MPEG"
}
]
}
}
我的代码很简单:
HashMap<String,String> newTypesMap = new HashMap<String,String>();
if (TransformTypeObj.has("encodeOptions")) {
JSONArray encodingOptionsArr = TransformTypeObj.getJSONArray("encodeOptions");
for( int i = 0; i < encodingOptionsArr.length(); i++ ) {
JSONObject encodeOptObj = encodeOptionsArray.getJSONObject(i);
JSONArray typesArr = encodeOptObj.getJSONArray("types");
for (int h = 0; h < typesArr.length(); h++) {
String oldtype = typesArr.getString(h).toString();
String newType = newTypesMap.get(oldtype);
typesArr.put(h, newType);
}
}
}
我无法编辑或查看此第三方系统,但显然顺序很重要。我将我的 Java 输出编辑为“正确”格式并进行了手动发布,系统接受了它。如果我尝试使用我的 java 代码输出,我会收到一条错误消息:
Java.lang.RuntimeException: com.jacksonmedia.data.api.marshalling.MarshallingException: array element type mismatch
我认为这与对象的顺序有关。如何使“processType”JSONString 成为 TransformType 对象中的第一个元素?