当前位置: 首页 > 知识库问答 >
问题:

如何将JSON字符串转换为映射

柯建业
2023-03-14

很抱歉重复了这个问题,但我的问题是其他的。我有一个从json-string解析到map的JSON解析器方法。但是json-string有一个值,这个值也是json-string。大概是这样的:

    {
   "status_code":"255",
   "data":"{\"user\":{\"idpolzovatel\":1,\"id_poluch_tip\":1,\"fio_polzovatel\":\"Andrew Artificial\",\"login\":\"imi\",\"parol\":\"698d51a19d8a121ce581499d7b701668\",\"key\":null,\"nachalnik\":1,\"buhgalter\":0,\"delopr\":1},\"token\":\"230047517dd122c8f8116a6fa591a704\"}",
   "message":"Successfull!"
}

因此,我的解析方法:

public Map<String, String> convertToMapFromJSON(String res){
    ObjectMapper objectMapper = new ObjectMapper();
    Map<String, String> response = new HashMap<String, String>();
    try {
        response = objectMapper.readValue(res, new TypeReference<Map<String, String>>);
        int t = 0;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return response;
}

我在客户端得到响应:

ResponseEntity<String> responseEntity = restTemplate.postForEntity(REST_SERVICE_URI + "/auth/", data, String.class);
String res = responseEntity.getBody();//получаем тело запроса в формате JSON
Map<String, String> response = convertToMapFromJSON(res);

Map<String, String> data1 = convertToMapFromJSON(response.get("data"));

Map<String, String> userDetailes = convertToMapFromJSON(data1.get("user"));
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.lang.String
Map<String, String> userDetailes = data1.get("user");

?但是随后我得到一个错误,IDE告诉我,data1.get(“user”)是一个字符串。

那么,我如何用我的UserData获得这个LinkedHashMap呢?对不起,为了我的英语。谢谢你。

共有1个答案

吴品
2023-03-14

Java为泛型应用类型擦除。它在编译时检查类型的正确性,然后删除编译代码(字节码)中的泛型签名。因此,在运行时没有检查。

请参见此示例,其行为与您的JSON库相同:

/** Returns a generic map which all keys are string but not values **/
T <T extends Map> raw(Class<T> clazz) {
    Map object = new LinkedHashMap();
    object.put("string", "This is a String");
    object.put("map"   , new LinkedHashMap());
    return (T) object;
}

以下是您的代码:

/** codes you try to execute/write **/
void withStringValues() {
    Map<String,String> object = raw(Map<String,String>.class);
    String string = object.get("string"); // Ok
    String map    = object.get("map");    // ClassCastException
    Map    map    = object.get("map");    // Doesn't compile
}
void withTypeErasure() {
    Map object = raw(Map.class);
    String string = (String) object.get("string");
    String map    = (String) object.get("map");
}
void withRealValues() {
    Map<String,Object> object = raw(Map<String,Object>.class);
    String             string = (String) object.get("string"); // Ok
    Map<String,Object> map    = (Map) object.get("map");       // Ok
}
 类似资料:
  • 问题内容: 我在JS中有一个JSON对象,我想将其转换为字符串。这是功能吗? 提前致谢, 问题答案: JSON.stringify() 将值转换为JSON,如果指定了replacer函数,则可以选择替换值,如果指定了replacer数组,则可以选择仅包括指定的属性。

  • 问题内容: 我已经开始在golang中工作,我正在尝试解析JSON字符串以构建结构,但无法正常工作。 JSON字符串: 每日”:[{“ userAccessToken”:“ acessToken”,“ uploadStartTimeInSeconds”:1499744832,“ uploadEndTimeInSeconds”:1499744832,“ callbackURL”:“ callback

  • 问题内容: 使用服务器端C#,如何将查询字符串转换为键和值的JSON字符串?例如,我想转换 至 我知道如何手动解析和格式化,但是在走那条路之前,我想问一下,因为可能有一个库可以做得更好。谢谢! 问题答案: 这给出了您想要的完全相同的json

  • 问题内容: 我试过了: 它返回:我期望 如何执行此操作? 问题答案: 不是IDictionary,因此无法直接将其序列化。您首先需要将其转换为字典,然后对其进行序列化。 更新 :关于每个键多个值的问题之后,对的调用将简单地将它们返回,并以逗号分隔,这可能没问题。如果不是,则总是可以调用并决定如何适当地使用这些值。更新了下面的代码以显示一种可能的方法。

  • 问题内容: 我想在我的swift项目中做一个将String转换成Dictionary json格式的函数,但是出现一个错误: 无法转换表达式的类型(@lvalue NSData,options:IntegerLitralConvertible … 这是我的代码: 我在Objective-C中实现此功能: 问题答案: 警告:如果出于某种原因必须使用JSON字符串,这是将JSON字符串转换为字典的便捷