首页 文章

从JSON转换Map <String,Object>

提问于
浏览
0

我目前正在编写一个基于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 类的信息 . 所以我的问题是,我如何传递这些信息,或者在创建/从 Map 创建 Locale 对象而不是 String 对象时我需要做什么?

谢谢!

2 回答

  • 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);
    }
    
  • 0

    也许我没有正确地关注你,但是如果你在String上得到Locale而你想要Locale对象,你必须做这样的事情:

    Locale myLocale = new Locale(myRetrievedLocaleString);
    

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

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

    这样你就可以在String上获得一个有效的json,现在你可以将它成功转换为JSON对象并提取语言环境对象 .

相关问题