10

Gson JsonPrimitive 反转义字符转换

 3 years ago
source link: http://i.lckiss.com/?p=7573
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Gson JsonPrimitive 反转义字符转换

2021-12-04

后端给了一个这种格式的 Json 数据:

{
"obj":"[
    {
    \"Name\":\"小明\"
    },
    {
    \"Name\":\"小白\"
    },
    {
    \"Name\":\"小黑\"
    }
    ]"
}

简单来说就是:一个字段的内容为转义后的json,这时无法使用 Gson 直接转换为对象,因为 Gson 无法识别那串转义后的 json。(PS:全部带转义字符的是可以直接解析的)

解决方案:

val parseString = JsonParser.parseString(obj)
val obj = if (parseString.isJsonPrimitive) {
    parseString.asJsonPrimitive.asString
} else {
    obj
}
Gson().fromJson(obj, object : TypeToken<List<Obj>>() {}.type)

先用 JsonParser 解析为 JsonElement,再使用 isJsonPrimitive 判断,至于这个判断根据官方的解释只是用来判断是否为原始数据类型,然后强转为相关类型。

但是通过查看源码可以得知:实际上和直接获取并无不同。

于是后来证明直接解析也可以,打断点也没能走进 asJsonPrimitive 逻辑,可是之前明明是失败的,再仔细看了一眼逻辑,多了一行 :

val parseString = JsonParser.parseString(obj)

核心就在这里了,转义的字符已经被去除了,于是也就可以解析成功了,以上!


Recommend

  • 17

    byzhangxinxu from https://www.zhangxinxu.com/wordpress/?p=9770 本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。...

  • 16
    • blogread.cn 3 years ago
    • Cache

    添加URL/HTML字符转义功能

    添加URL/HTML字符转义功能 浏览:1925次  出处信息        今天同事想用DataReport来展...

  • 7
    • abcdxyzk.github.io 3 years ago
    • Cache

    html中制表符(TAB)的转义字符

    html中制表符(TAB)的转义字符 - kk Blog —— 通用基础kk Blog —— 通用基础 date [-d @int|str] [+%s|"+%F %T"]

  • 9

    Python基础(9)–字符串的概述、创建与转义字符◎知识点◎脚本练习#!/usr/bin/env python3# -*- coding: utf-8 -*-"""

  • 6
    • www.veiking.cn 3 years ago
    • Cache

    最常用特殊符号转义字符表

    最常用特殊符号转义字符表_二师兄_Veiking百草园-知识点滴,日常分享 本文搜集整理的是最常用特殊符号转义字符,转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。转义序列通常有两种功能。第...

  • 7
    • www.veiking.cn 3 years ago
    • Cache

    希腊字母转义字符表

    希腊字母转义字符表_二师兄_Veiking百草园-知识点滴,日常分享 本文搜集整理的是希腊字母转义字符,转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。转义序列通常有两种功能。第一个是编码一...

  • 8
    • www.veiking.cn 3 years ago
    • Cache

    重要特殊标记转义字符表

    重要特殊标记转义字符表_二师兄_Veiking百草园-知识点滴,日常分享 本文搜集整理的是重要特殊标记转义字符,转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。转义序列通常有两种功能。第一个...

  • 9
    • www.veiking.cn 3 years ago
    • Cache

    特殊符号转义字符表

    特殊符号转义字符表_二师兄_Veiking百草园-知识点滴,日常分享 本文搜集整理的是特殊符号转义字符,转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。转义序列通常有两种功能。第一个是编码一...

  • 8
    • blog.51cto.com 2 years ago
    • Cache

    Python 转义字符、格式化字符

    Python 转义字符、格式化字符 精选 原创

  • 7
    • blog.51cto.com 2 years ago
    • Cache

    Python__02--转义字符

    Table of Contents1 转义字符 定义: 转义字符(Escape character),所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而python中定义了一些字母前加""来表示常见的那些不能显示...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK