私はJavaでプログラムを作成しています。このプログラムでは、JSON入力を編集してから、POSTを介して別のシステムに再送信する必要があります。私のコードでは、JSONArrayを新しいビデオタイプに更新するkey:valueペアを持つHashMapを使用しています。コードは正常に機能しているように見えますが、私のコードは異なる順序を出力し、その理由はわかりません。
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オブジェクトの最初の要素にするにはどうすればよいですか?