从JSON

时间:2018-12-09 13:23:47

标签: java 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 

所以基本上可以,但是语言环境对象被解释为String,这看起来很正常,因为JSON字符串中没有有关Locale类的信息。所以我的问题是,从/到地图创建的Locale对象而不是String对象时,如何传递该信息或该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:0)

也许我没有正确地关注您,但是如果您将Locale放在String上并且想要Locale对象,则必须执行以下操作:

Locale myLocale = new Locale(myRetrievedLocaleString);

另一方面,似乎您没有获得有效的JSON对象,但是,如果您只需要locale并且无法提取它,则可以执行以下操作:

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

这样,您将在String上获得有效的json,现在您可以将其成功转换为JSON对象并提取语言环境对象。

答案 1 :(得分:0)

我找到了基于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);
}