6

対応するキーと値のペアを使用して JSON 文字列を作成しようとしています。以下のコードでは、 のリストを反復処理してから、AttributeValueを使用して JSON 文字列を書き込もうとしていal.getValue mapます。

private <T> String createJsonWithEscCharacters(List<AttributeValue<T>> list) {

    StringBuilder keyValue = new StringBuilder();

    if (list != null) {
        for (AttributeValue<?> al: list) {

            keyValue.append("\"").append("v").append("\"").append(":").append(" {");

            for (Map.Entry<String, String> entry : ((Map<String, String>) al.getValue()).entrySet()) {
                keyValue.append("\"").append(entry.getKey()).append("\"");
                keyValue.append(":").append(" \"").append(entry.getValue()).append("\"").append(",");
                System.out.println(keyValue);
            }

        }
    }

    return null;
}

を調べると、 as が表示されal、print すると、これが表示されます-valueLinkedHashMap<K,V>al.getValue()

{predictedCatRev=0;101;1,1;201;2, predictedOvrallRev=77;2,0;1,16;3, sitePrftblty=77;2,0;1671679, topByrGms=12345.67, usrCurncy=1, vbsTopByrGmb=167167.67}

つまり、al.getValue()マップを反復処理し、それらkey/value pairを使用して JSON 文字列を作成できます。

al.getValue()今、マップを繰り返して JSON 文字列を作成しようとしています。al.getValue()したがって、マップを反復した後、 JSON文字列は次のようになります。

{
 "lv": [
  {
   "v": {
    "predictedCatRev": "0;101;1,1;201;2",
    "predictedOvrallRev": "77;2,0;1,16;3",
    "sitePrftblty": "77;2,0;1671679",
    "topByrGms": "12345.67",
    "usrCurncy": "1",
    "vbsTopByrGmb": "167167.67"
   }
  }
 ],
}

これを行う最もクリーンな方法は何ですか?上記のコードでは、上記の JSON 文字列を完全に作成することはできませんが、上記のコードが何であれ、必要な方法で JSON 文字列のわずかな部分を作成できますが、途中で完全な JSON 文字列を作成することはできません。探している。これを行うための最もクリーンな方法は何ですか?

ありがとう

4

5 に答える 5

1

Google gson を使用する場合。

var getRowData =
[{
    "dayOfWeek": "Sun",
    "date": "11-Mar-2012",
    "los": "1",
    "specialEvent": "",
    "lrv": "0"
},
{
    "dayOfWeek": "Mon",
    "date": "",
    "los": "2",
    "specialEvent": "",
    "lrv": "0.16"
}];

    JsonElement root = new JsonParser().parse(request.getParameter("getRowData"));
     JsonArray  jsonArray = root.getAsJsonArray();
     JsonObject  jsonObject1 = jsonArray.get(0).getAsJsonObject();
     String dayOfWeek = jsonObject1.get("dayOfWeek").toString();

// ジャクソン使用時

    JsonFactory f = new JsonFactory();
              ObjectMapper mapper = new ObjectMapper();
          JsonParser jp = f.createJsonParser(getRowData);
          // advance stream to START_ARRAY first:
          jp.nextToken();
          // and then each time, advance to opening START_OBJECT
         while (jp.nextToken() == JsonToken.START_OBJECT) {
            Map<String,Object> userData = mapper.readValue(jp, Map.class);
            userData.get("dayOfWeek");
            // process
           // after binding, stream points to closing END_OBJECT
        }
于 2014-04-22T09:59:31.180 に答える
0

呼び出し元のリクエストへの応答として JSON を送り返したいと想定しています。Jackson コンバーターを使用して Map オブジェクトを JSON に自動的に変換する Spring フレームワークを使用できます。戻り値の型にアノテーション @ResponseBody を使用するだけで済みます。詳細については、Spring 3 のドキュメントを参照してください。

于 2013-06-13T23:21:31.427 に答える