json增加反斜杠 php_Android去除 json 中转义反斜杠

dcb94a49c58f287d985bcb210ba31fa7.png

遇到的问题

在 App 中添加一个活动页,这个活动页是用 H5 来展示的。

H5的链接是定义成固定的,即再进入时便有H5的链接;

H5 右上角有一个分享按钮,点击分享按钮,分享一个新的链接地址到微信,或者微信朋友圈。

现在问题来了,分享的数据从哪拿呢?

可能朋友们觉得这很简单啊 ,直接在创建 View 的时候拿呗!

其实单独来这么做肯定没什么问题,但是我们的这个 H5 的页面承载了很多功能,有很多逻辑,所以如果这样拿数据的话,又要新加判断逻辑,因为其他跳转过来的 H5 是不需要这样的逻辑的。

于是我们集体碰了下头,商量出来这样的一个想法:

既然 我们的这个 H5 页面的链接是固定的,那么为了减少请求网络以及避免给原有的 H5 页面造成影响的情况下呢,我们可以把 分享要用到的数据放到网页连麦,这样再加载网页时,其实在网页中已经有数据了。

然后 Android 本地再通过 调用 js 往外暴露的方法,去拿到分享数据,这样不就两全其美了吗!

于是说干就干:

第一步、等后端给写好的 H5 地址

第二步、加载这个 H5 地址

第三步、给分享按钮添加判断逻辑,只有当前这种情况下,才出发 调取这个 js 方法

然后给这个分享按钮添加点击事件,点击事件我们是这样定义的。

 share_fl.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                progress_webview.evaluateJavascript("javascript:app_share_ret()", new ValueCallback() {                    @Override                    public void onReceiveValue(String value) {                        if (TextUtils.isEmpty(value)) {                            return;                        }                        String newValue = StringEscapeUtils.unescapeJava(value.substring(1, value.length() - 1));                        ShareBean shareBean = AppClient.getInstance().getGson().fromJson(newValue, ShareBean.class);                    }                });            }        });

即,使用 evaluateJavascript 方法去调用 js ,因为这样能拿到 js 方法返回的值,如果只是单纯的去调用方法,那么可以用

webview.loadUrl("javascript:js方法名()")

第四步、问题来了

返回的数据仍存在转移字符

但是,我不是立马发现的,指导我把网页中定义好的字符串拷贝过来,然后和返回的字符串一起打印,我才发现:

拷贝过来的字符串 和 返回的字符串对比,拷贝的没有转义字符,而返回的有。

也就是返回的字符串是这样的

{"share_title": "分享标题","share_desc": "分享描述","share_link": "https://www.baidu.com","share_image": "https://www.baidu.com/baidu.png"}

但是复制过来后,打印出来的是这样的

{"share_title": "分享标题","share_desc": "分享描述","share_link": "https://www.baidu.com","share_image": "https://www.baidu.com/baidu.png"}

但是,奇怪的是 iOS 能够解析并且分享成功,但是 Andorid 确不行。

第五步、解决方案

刚开始的时候,简单实用将转义符号替换掉,成功了,但是问题是有可能内容中存在的符号。

所以换的第二种

先依赖 apache 的一个文件

 implementation "org.apache.commons:commons-lang3:3.8.1"

然后使用

 String newValue = StringEscapeUtils.unescapeJava(value);

去掉了

终于搞定!

小伙伴们有没有更好的方法,可以留言沟通一下哈~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值