【问题标题】:How do I convert this JSON string enclosed in double quotes to object如何将这个用双引号括起来的 JSON 字符串转换为对象
【发布时间】:2021-07-31 07:31:50
【问题描述】:

我的应用程序从前端收到一个加密的 json,我在后端对其进行解密,但它的格式如下:

"{\"firstname\":\"JOHN\",\"lastname\":\"DOE\"}"

是的,解密后的 json 上有前导和尾随双引号。

GSON 和对象映射器不起作用,因为它们检测到第一个字符上的引号。

有没有办法在不手动删除封闭引号的情况下正确转换它?

【问题讨论】:

    标签: java json spring


    【解决方案1】:

    您的数据似乎已被双重编码,因此解决方案是双重解码。具体来说:多亏了反斜杠,这实际上是一个有效的 JSON string 值,它表示一个字符串化的 JSON 对象。因此,如果您要求您的 JSON 库将其解码为 String,您应该得到一个值为

    的字符串
    {"firstname":"JOHN","lastname":"DOE"}
    

    然后您可以要求您的 JSON 库将 字符串解码为您真正想要的类型。

    【讨论】:

    • 我做了 String s = new JSONParser(str).string 并得到了{\"firstname\":\"JOHN\",\"lastname\":\"DOE\"} 我下班了,但我会尝试在输出字符串上再做一次,并用最终解决方案再次更新我会想办法的。
    • @askwer:JSONParser 来自哪个库?您提到了 GSON 和 ObjectMapper,似乎都没有包含具有该名称的类,至少没有全大写的 JSON。
    • aasmund-eldhuset,我上面提到的JSONParser来自org.apache.tomcat.util.json(@标签不起作用)
    • 我最终得到的最终解决方案:使用来自 GSON String newStr = JsonParser.parseString(oldStr).getAsString(); 的 JsonParser 我现在得到了我需要的格式:{"firstname":"JOHN","lastname":"DOE"}
    • @askwer:是的,看起来不错——你要求解析器将原始字符串解释为 JSON 字符串值;然后您可以再次将结果反馈给 JSON 解析器,并要求它将其解释为 JSON 对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多