iOS Json解析中特殊字符串('\\')处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS Json解析中特殊字符串('\\')处理相关的知识,希望对你有一定的参考价值。

参考技术A 需解析的JSON:
事出起因:源自公司一个接口不能解析。。。。

以下为一个技术群里的聊天记录截图:

看了这么多,我这边的处理就是:
将需要解析成json的字符串进行处理:

反正要做好预防工作,不然后台一个不小心,咱就得背锅嘿嘿嘿(没针对后台哈~~~🙊)
类似情况的文章:
https://blog.csdn.net/u014588619/article/details/50144913
https://blog.csdn.net/fallenink/article/details/53672027
...

json 响应中的特殊字符在 IE 中未解析

【中文标题】json 响应中的特殊字符在 IE 中未解析【英文标题】:Special character in json response is not parsed in IE 【发布时间】:2021-06-25 18:22:24 【问题描述】:

我在 js 文件中使用以下代码从 servlet 获取响应,如下所示:

代码如下:

  function(response)
    $("#city").attr("disabled", false);
    var select = $('#cityList');
    select.find('option').remove();
    var parsedObject = JSON.parse(response);      
    for(var city in parsedObject)           
   $('<option>').val(parsedObject[city].cityName).text(parsedObject[city].cityName).appendTo(select);

在 Internet Explorer 中,我收到一条错误消息,指出以下行中的“无效字符”: var parsedObject = JSON.parse(response);

检查响应后,我注意到城市名称导致问题的对象: "countryId":0,"stateId":0,"cityId":4046,"cityName":"Belle Vall�

正确的城市名称是 Belle Vallée。似乎 IE 不允许解析这个城市名称,因此下拉列表中没有显示城市值。

在 Google Chrome 中,我确实看到了所有城市值,但是,上述城市名称未正确显示,如下所示:

我遇到了一个解决方案,可以在标题中添加以下代码以允许 chrome 正确显示特殊字符,但它对我不起作用。

以下代码正在 servlet 端执行:

这是我使用 ajax 调用的新函数的样子:

function changeState()
    var state = $("input#province").val();   
            
    $.ajax(
        type: "GET",    
        url : 'LocationServlet',
        dataType : "json",
        contentType: "application/json; charset=utf-8",
        data : "stateName": state,        
        success : function(response)
        $("#city").attr("disabled", false);
        var select = $('#cityList');
        select.find('option').remove();
        var parsedObject = JSON.parse(response);

        for(var city in parsedObject)
            $('<option>').val(parsedObject[city].cityName).text(parsedObject[city].cityName).appendTo(select);
        
       
    );     

【问题讨论】:

将 html 页面的字符集设置为 utf8 我做了,但仍然遇到无效字符问题 这取决于来源,你必须使用相同的,或者做一个转换 【参考方案1】:

添加

response.setCharacterEncoding("UTF-8");

如果您的响应来自 ajax 调用。只需检查 ajax 调用的内容类型即可。

$.ajax(
    type: "GET",
    dataType : "json",
    contentType: "application/json; charset=utf-8",
    ...
)

【讨论】:

我在我的 servlet 代码中添加了这一行,但仍然收到相同的“无效字符”错误。 这里有一个教程。也许对你有帮助:baeldung.com/servlet-json-response 这篇文章也可以帮助到你:***.com/questions/1125758/… 我正在使用 $.get() 来获得响应。 使用 $.get 你没有选择。因此,只需像上面那样使用 ajax 调用尝试一下。【参考方案2】:

您收到的响应似乎已经被解析过了。 而不是行: var parsedObject = JSON.parse(response);

尝试使用作为解析对象接收的“响应”。

【讨论】:

我在观察作为响应收到的值时确实意识到了这一点。因此,我按照建议做了同样的事情,它奏效了。感谢您的确认!

以上是关于iOS Json解析中特殊字符串('\\')处理的主要内容,如果未能解决你的问题,请参考以下文章

ios 在json解析过程中浮点型字符串出现精度丢失问题

JSON.parse()解析该json字符串,特殊字符串引起报错

Swift 中的特殊 JSON 解析 [关闭]

java解析json格式文件

ios JSON解析常见错误

JSON.parse解析特殊字符报错的解决办法