我正在編寫一個Java程序,我需要編輯一個JSON輸入,然後通過POST重新提交給另一個系統。在我的代碼中,我使用了一個HashMap,它有一個key:value對,其中我將JSONArray更新爲新的視頻類型。代碼似乎工作正常,但我的代碼輸出不同的順序,我不知道爲什麼。在JSON對象中排列元素?
當我與我的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對象中的第一個元素?
是你的答案缺少一些相關的代碼?這段代碼似乎只是編寫內部''encodeOptions'''數組的代碼? – pb2q