1

Map タイプに変換する必要がある json 文字列があります。

Json 使用:

 String jsonString = "{
    "varA": "<math><mrow><mn>8</mn></mrow></math>",
    "varB": "<math><mrow><mi>m</mi></mrow></math>",
    "ans": "<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>"
 }"

json を Map に変換するコード:

Map<String, String> variableMap = gson.fromJson(jsonString, new TypeToken<Map<String,String>>(){}.getType());

エラー:

[ERROR] The JsonDeserializer StringTypeAdapter failed to deserialize json object {"varA":"<math><mrow><mn>8</mn></mrow></math>","varB":"<math><mrow><mi>m</mi></mrow></math>","ans":"<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>"} given the type class java.lang.String

タイプに関係があることは知っていますが、タイプトークンで明示的にタイプが String になることを示しました。

gson オブジェクトは次のように宣言されます。

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
4

2 に答える 2

2

Java 文字列に含まれる JSON 文字列値を区切る引用符をエスケープする必要があります。実際、あなたの例は有効なJavaプログラムではありません.Javaには、初心者向けの複数行の文字列がありません。

次のスニペットは問題なく動作します (山かっこと Unicode 文字は無害であることがわかります)。

public static void main(String[] args) {
         String jsonString = "{\"varA\": \"<math><mrow><mn>8</mn></mrow></math>\", \"varB\": \"<math><mrow><mi>m</mi></mrow></math>\", \"ans\": \"<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>\"}";
         Map<String, String> variableMap = new Gson().fromJson(jsonString, new TypeToken<Map<String,String>>(){}.getType());
         System.out.println("foo");
    }
于 2013-06-06T12:22:14.680 に答える
1

Map.classnew の代わりに使用すると機能しますTypeToken<Map<String,String>>(){}.getType()。私の小さな例を見てください:

Gson gson = new GsonBuilder().disableHtmlEscaping().create();

Map<String, String> map = new HashMap<String, String>();
map.put("varA", "<math><mrow><mn>8</mn></mrow></math>");
map.put("varB", "<math><mrow><mi>m</mi></mrow></math>");
map.put("ans", "<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>");

String json = gson.toJson(map);

System.out.println(json);
System.out.println(gson.fromJson(json, Map.class));

それは印刷します:

{
   "varB":"<math><mrow><mi>m</mi></mrow></math>",
   "ans":"<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>",
   "varA":"<math><mrow><mn>8</mn></mrow></math>"
}

{varB=<math><mrow><mi>m</mi></mrow></math>, ans=<math><mrow><mn>8</mn><mo>&#8290;</mo><mi>m</mi></mrow></math>, varA=<math><mrow><mn>8</mn></mrow></math>}
于 2013-06-06T12:47:20.577 に答える