java正则转义json中双引号

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java正则转义json中双引号相关的知识,希望对你有一定的参考价值。

现有类似如下的json数据:
"地址":"北京市海淀区''中关村南大街"8号"

"电话":"010''83660700""

在使用JSONObject.fromObject(json);处理时报如下异常:
Exception in thread "main" net.sf.json.JSONException: Expected a ',' or '' at character 1256 of

貌似是因双引号的原因导致无法识别,请问是否可以用正则进行转换,要怎样写,请高人指教!万分感谢。

还有,这些数据提取出来后要存入csv文件,是否会有影响。
这是从百度地图的Place API中获取的数据,就算有问题也没法改原始数据的。我想知道怎么批量替换,使用正则表达式。

参考技术A 你的JSON本来就有问题吧,怎么可能引号里面还有引号?如果JSON是JS中的,那么双绰号里面可以有单引号,单引号里面也可以有双引号。就像"地址":"北京市海淀区'中关村南大街'8号".
如果JSON在JAVA中,那就用\转义一下。"地址":"北京市海淀区\"(双引号)中关村南大街\"(双引号)8号"
或者里面的双引号改成单引号也行"地址":"北京市海淀区'(单引号)中关村南大街'(单引号)8号"
参考技术B "电话":"010\''83660700\""

里面的双引号有\进行转义
参考技术C "电话":"010''83660700""改成"电话":"010'83660700'",你试试看

使用 Jackson/Java 来确保 JSON 的所有序列化在单引号或双引号内分隔不受信任的数据会转义任何特殊字符?

【中文标题】使用 Jackson/Java 来确保 JSON 的所有序列化在单引号或双引号内分隔不受信任的数据会转义任何特殊字符?【英文标题】:Using Jackson/Java to ensure that and all serialization to JSON delimits untrusted data within single or double quotes escapes any special characters? 【发布时间】:2017-08-23 17:35:22 【问题描述】:

我有以下 Fortify 安全问题:

JSON 注入:确保使用安全的序列化函数执行所有序列化,该函数在单引号或双引号内分隔不受信任的数据并转义任何特殊字符。

下面是我的代码:

public String saveJson(String json, long ID, String userId) throws SQLException, JsonParseException, JsonMappingException, IOException
    

        ObjectMapper objectMapper = new ObjectMapper();

        List<item> listOfNewItems = objectMapper.readValue(json, new TypeReference<List<item>>());
        userId= userFactory.getUser().getID();
        String message = saveJson(listOfNewItems,ID,userId);

        return message;
    

我正在尝试使用

org.codehaus.jackson.io.JsonStringEncoder.getInstance().quoteAsString(json);

或许

objectMapper.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
            objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

但不确定?

有关错误的更多详细信息:

将未经验证的输入写入 JSON

有什么想法吗?

【问题讨论】:

您发布的问题描述谈到了序列化,但您发布的代码实际上执行了反序列化。您在寻求序列化或反序列化方面的帮助吗? 也许您需要在反序列化之前清理 JSON 字符串? OWASP 的 json sanitizer 看起来很适合。几年前的Here's a short discussion。如果您需要逐字段处理,您可能正在考虑自定义(反)序列化。 This might be a start. 你能提供一个不使用专门序列化功能的json示例和另一个使用专门序列化功能的安全json版本吗?默认 ObjectMapper 应该可以满足您的要求。为什么要更改配置? 【参考方案1】:

到目前为止mikaelhggagan singh 的cmets 是正确的:

    Jackson ObjectMapper 在其默认设置中已经“确保使用安全的序列化函数执行所有序列化,该函数在单引号或双引号内分隔不受信任的数据并转义任何特殊字符。”

    李>

    您显示的代码是反序列化的,而不是序列化的(和/或已损坏或复制不正确)

【讨论】:

谢谢你,丰富。您第一点中引用的文字正是我想要的。 (我引用了你的问题) 哈,你做到了。 Objectmapper 文档是否像引用的文本一样以简单、直接的方式陈述了这一事实? 我怀疑它是直接陈述的,因为我认为它从设计目标中是不言而喻的。如果没有正确转义,该库将无法“往返”来自 Java -> JSON -> Java 的任意字符串。 我查看了 Jackson 文档,但找不到任何类似的声明。我认为作者只是认为这是不言而喻的。搜索诸如“杰克逊 json 是否转义字符串”之类的内容会得到类似 javausecase.com/2017/02/22/… 的博客文章

以上是关于java正则转义json中双引号的主要内容,如果未能解决你的问题,请参考以下文章

php用正则表达式怎么取双引号里面的内容??

javascript中双引号和单引号之间的歧义

正则表达式在双引号内转义双引号

sql语句中双引号添加的问题

java String怎么可以包含多个双引号不报错

js函数参数有双引号的解决方法