iOS给H5传值JSON中的转义字符\\\被自动移除问题

news/2024/7/4 9:33:45

1、问题

有一个下面的字符串要从iOS传递给H5,该字符串是NSDictionary转化成的JSON字符串

NSString *test= @"{\"result\":\"{\\\"alipay_trade_app_pay_response\\\":{\\\"code\\\":\\\"10000\\\",\\\"msg\\\":\\\"Success\\\",\\\"app_id\\\":\\\"20170703070\\\",\\\"auth_app_id\\\":\\\"2017071007703070\\\",\\\"charset\\\":\\\"utf-8\\\",\\\"timestamp\\\":\\\"2021-01-15 16:20:07\\\",\\\"out_trade_no\\\":\\\"2021011516200100001\\\",\\\"total_amount\\\":\\\"0.01\\\",\\\"trade_no\\\":\\\"2021011522001498171441503742\\\",\\\"seller_id\\\":\\\"2088911950619548\\\"},\\\"sign\\\":\\\"5dIhgjeWwTQZy0Np9ASA048kXVD50TMW6\\/EKLtLjnLmu00aha1FvV28Hh4NC5fK9n54WjueJ9cTBcdUoVRusitDEAFh2QLupnPGvGR1inegiHsPd4U8T\\/AvdKpmU\\/VY\\/jLVX32eOQadGnejYoJLUJv43zI\\/oV8P765+usFxFEvYrrmJx1RiGetuObzFeJoUmCK+s1kc0AE8bxiOVrwfMjPAtRGQ62vqPy6sitaqWds+hdgvyZ\\/cp53pgPV5oWg1jYHTj1jQmA==\\\",\\\"sign_type\\\":\\\"RSA2\\\"}\",\"resultStatus\":\"9000\",\"memo\":\"\"}";

结果H5接收到的值被转换成下面

{"result":"{"alipay_trade_app_pay_response":{"code":"10000","msg":"Success","app_id":"2017077703070","auth_app_id":"2017071007703070","charset":"utf-8","timestamp":"2021-01-15 15:43:36","out_trade_no":"2021011515432900001","total_amount":"0.01","trade_no":"2021011522001498171441798181","seller_id":"2088911950619548"},"sign":"ls0PtRmswdvkFCCo2NOwLbe+93TKbRfR/K6O+RftocHrl0sSvZx2x7ESIRQSP5d1sINZMqNcRpMEUx85IZZCE+ISVdfISoR9jHiwxl2npHH/vEYBU7DQ5M9+jFZJqxq6Knn5nZChBkFGvw+TddhyW4jiSkvHc99atpLcRZsuYOr9YwzKK2PhLuOCqHiduGbaI9YyCUBUNhuhgQB9tvdBptfql3HKR0X0EVp2ChtKSruoD89bUFgDsXP0ei5SCwQ5LhvKM17vgILNdwgDElQ==","sign_type":"RSA2"}","resultStatus":"9000","memo":""}

很明显字符串中的字符\\也被去除了,导致H5端JSON.parse无法解析json串

2、解决方案

iOS原代码如下

    NSError *parseError = nil;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:resultDic options:0 error:&parseError];
    NSString *dataStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSString *resultDataStr =[NSString stringWithFormat:@"iOSPaycallback('%@')", dataStr];
    [_wkWebView evaluateJavaScript:resultDataStr completionHandler:nil];

此时H5段接受用的如下方法

 var datares = JSON.parse(result);

如果串中没有\\上面方法是正常的

改成如下

    NSError *parseError = nil;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:resultDic options:0 error:&parseError];
    NSString *dataStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSString *resultDataStr =[NSString stringWithFormat:@"iOSPaycallback(%@)", dataStr];
    [_wkWebView evaluateJavaScript:resultDataStr completionHandler:nil];
    

此时H5段接受用的如下方法,不用JSON解析可以直接取值如result.resultStatus

 var datares = result;

http://www.niftyadmin.cn/n/2815736.html

相关文章

指针的引用:* x

引用:int &xy;这里的y必须是变量,对x做出的赋值等操作,y的值也会改变。我们可以理解为x是变量y的别名。并且引用只能在定义的时候才能使用。 而指针引用,例如:char* &x y;我们刚遇到的时候可能会理解错误&am…

Docker修改空间大小

2019独角兽企业重金招聘Python工程师标准>>> -Docker修改空间大小 Docker默认空间大小分为两个,一个是池空间大小,另一个是容器空间大小。 池空间大小默认为:100G 容器空间大小默认为是:10G 所以修改空间大小也分为两个…

搞定JVM垃圾回收就是这么简单

上文回顾:《可能是把Java内存区域讲的最清楚的一篇文章》 写在前面 本节常见面试题: 问题答案在文中都有提到 如何判断对象是否死亡(两种方法)。简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用…

用注册机给keil4 注册 ERROR R206: NO REGISTRY ACCESS, ADMINISTRATION RIGHTS REQUIRED

ERROR R206: NO REGISTRY ACCESS, ADMINISTRATION RIGHTS REQUIRED 【翻译】错误R206:没有注册使用权,需要管理员权限。 解决方法: 用“管理员的身份运行”启动keil 才可以注册

React中拓展Jquery组件

1、实现 import $ from "jquery"; ;(function (WB) { WB.extend({ //插件名称wbalert: function() {alert(我是一个插件);}}); })($);export default $2、使用 import WB from "./wbjquery"componentDidMount() {(WB as any).wbalert() }

测试中常用符号代表意思

Pass(OK)通过——测试通过 POK部分通过——多条测试用例部分通过 Fail(NG)未通过——测试出问题,通常后面会备注问题细节 NT(Not Test)未测试——本轮不测试该功能跳过 Block阻塞——因某些特殊原因阻塞 NA(Not Available)无此功能——产品并无测试用例所对应功…

windbg分析BSOD dump文件实战

2019独角兽企业重金招聘Python工程师标准>>> 今天刚好手边有一个系统蓝屏的dump文件,下面一步一步来找到出错的地方。 1.用windbg打开dump文件,设置好符号路径等。 已经基本确定了是哪个驱动引起的问题。 2.执行!analyze -v命令, …

使用node构建简单的cli工具

代码 1、在package.json中增加 {"name": "test","version": "1.0.0","bin": {"kkb": "./bin/kkb.js"},... }2、终端中执行 kkb init mytest3、具体的代码 kkb.js #!/usr/bin/env node // 指定解释…