2016-07-08 13 views
0

私はそれにいくつかのデータを格納するデータ構造を有する、非常に特異的なJSON構造を受け入れ:保管JSONオブジェクト

{ "NVPS":[ "NAME": "FORMDATA"、 "VALUE": " myData "]}

私は値のフィールドに入れている文字列にサブオブジェクトを含む大きなオブジェクトを直列化しています - 上記の" myData "を置き換えます。

// Serialise the form object 
Map<String, String> formData = new HashMap<String, String>(); 
String foJson = JsonUtils.serializeJson(formObject); // returns a serialised version of formObject 
formData.put("NAME", "formData"); 
formData.put("VALUE", foJson); 

String storeJson = JsonUtils.serializeJson(formData); 
storeJson = "{\"NVPS\":[" + storeJson + "]}"; 

誰も私がこれを行うことができる可能性があります醜い方法をお勧めしますか? JSON文字列を手作業で作成する最後の行には特に満足していません。ここで

はJsonUtilsからのserializeJSON()関数です:

public static String serializeJson(Object dto) { 
    String result = null; 
    try { 
     ObjectWriter writer = mapper.writer(); 
     result = writer.writeValueAsString(dto); 
    } catch (Exception e) { 
     String errorMsg = "Exception in serializeJson input= " + dto; 
     logger.error(JSON_UTILS_DEBUG_TEXT + errorMsg); 
     throw new RuntimeException(e); 
    } 
    return result; 
} 

それはジャクソンのObjectWriter com.fasterxml.jackson.databind.ObjectWriterを使用しています。

最初のコードブロックをクリーンアップするにはどうすればよいですか?

+1

「NVPS」は配列ですか?つまり、 '{}'の代わりに '[]'を使います。 –

+0

明らかにそうではありません。これは、SAPシステムで使用されるRFCによって定義される構造体です。 RFCでは、JSONオブジェクトを格納することができますが、任意のJSON文字列を使用することはできません。 {\ "NVPS \":["NAME": "myName"、 "VALUE" "myValue"]} –

+0

'{" NVPS ":[" NAME ":" formData "、" VALUE ":" myData "]}'は有効なJSONではないことに注意してください。 –

答えて

1

{ "NVPS": [ "NAME": "formData", "VALUE" : "myData" ] }は有効なJSONではありません。有効なJSONのために


、あなたが試すことができます:

ObjectMapper mapper = new ObjectMapper(); 

ArrayNode arrayNode = mapper.createArrayNode(); 
arrayNode.addObject().put("NAME", "formData"); 
arrayNode.addObject().put("VALUE", "myData"); 

ObjectNode rootNode = mapper.createObjectNode(); 
rootNode.set("NVPS", arrayNode); 

String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode); 

をそれはあなたを与える:

{ 
    "NVPS" : [ { 
    "NAME" : "formData" 
    }, { 
    "VALUE" : "myData" 
    } ] 
} 

をあなたも試すことができます。

ObjectMapper mapper = new ObjectMapper(); 

ObjectNode objectNode = mapper.createObjectNode(); 
objectNode.put("NAME", "formData"); 
objectNode.put("VALUE", "myData"); 

ObjectNode rootNode = mapper.createObjectNode(); 
rootNode.set("NVPS", objectNode); 

String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode); 

結果は次のようになります。

{ 
    "NVPS" : { 
    "NAME" : "formData", 
    "VALUE" : "myData" 
    } 
} 
関連する問題