从 JSON 转换映射<字符串、对象>



我目前正在编写一个基于Spring的Web服务应用程序,其中服务调用的结果应该使用一个相当通用的类ActionReply发送。这个类包含一个private Map<String, Object> parameters = new HashMap<>();,其中可以存储从数据库检索到的对象。现在这个值实际上可以是任何类型的类,但主要是基类BaseObject的一个子类。我现在面临的问题是,当我尝试将Locale对象存储在该映射中作为值时,返回的JSON字符串如下所示:

reply: <200,{"parameters":{"DATA":["de_DE"]},"successful":true,"errorMessage":null,"subsequentContext":null},{Content-Type=[application/json;charset=UTF-8], Transfer-Encoding=[chunked], Date=[Sun, 09 Dec 2018 13:15:21 GMT]}>So 

所以基本上这是可以的,但是locale对象被解释为String,这似乎很正常,因为JSON字符串中没有关于Locale类的信息。因此,我的问题是,我如何传递这些信息,或者在从/到Map创建时,我必须做什么才能得到Locale对象而不是String对象?

谢谢!

也许我没有正确地跟踪您,但如果您在String上获得Locale,并且您想要Locale对象,则必须执行以下操作:

Locale myLocale = new Locale(myRetrievedLocaleString);

另一方面,你似乎没有得到一个有效的JSON对象,但是,如果你只需要locale,而你无法提取它,那么就这样做:

String jsonLocale = response.substring(0,32) + "}";

这样,您将在String上获得一个有效的json,现在您将能够成功地将其转换为json对象并提取区域设置对象。

我找到了一个基于JSONPath:的解决方案

<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.3.0</version>
</dependency>

以下代码片段对我来说很好:

public static Object extractParametersData(Type type, String json)
{
Gson gson = new Gson();
HashMap<String, JSONArray> data = JsonPath.read(json, "$.parameters");
return gson.fromJson(String.valueOf(data.get("DATA")), type);
}

最新更新