json解析的时候出现null的问题

今天在写微信登录回调的时候 用state带上多个参数的json的时候,在回调函数上解析json居然出现NULL

首先检查了一下传过来的参数是这样的

string"{varify_code:XXX,id:XXXX}"

说明有参数,但是格式不对,网上搜了一堆 这里总结一下

  1. 有人说在json_decode的时候加上true 但是并没有用,因为加上一个true也只是吧解析为对象改为解析为数组而已

  2. 使用stripslashes函数和html_entity_decode函数:
    html_entity_decode() 函数的作用是把 HTML 实体转换为字符。
    stripslashes() 函数的作用是删除反斜杠。

  $data = stripslashes(html_entity_decode($info)); //$info是传递过来的json字符串
  $data = json_decode($data,TRUE);

但是并不适合这个情况

  1. json_last_error函数看看错误吗是什么 //返回了4

这个问题主要是因为在 json 字符串中反斜杠被转义,只需要用 htmlspecialchars_decode() 函数处理一下 $state即可:

$content = htmlspecialchars_decode($state);

但是并不适合这个情况

  1. 分析了一下 应该是在传上回调时候就应该用urlencode转义一下 防止破坏,所以在保存 json 数据时使用 urlencode() 函数:
$content = urlencode(json_encode($content));
//解析时使用 urldecode() 函数:
$content = json_decode(urldecode($content),true);

完美解决

Java中的JSON解析可能会返回null的情况有以下几种: 1. JSON字符串本身为null或空字符串。 2. JSON字符串中的某个属性值为null。 3. JSON字符串中的某个属性值不存在。 4. JSON字符串中的某个属性值类型与Java对象中的属性类型不匹配。 为了避免这些情况,我们可以在解析JSON字符串时进行一些判断和处理,例如使用try-catch语句捕获异常、使用if语句判断属性值是否为null等。 以下是一个简单的JSON解析示例,其中使用了try-catch语句和if语句来处理可能出现null情况: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class JsonParser { public static void main(String[] args) { String jsonString = "{\"name\":\"Tom\",\"age\":20,\"gender\":\"male\"}"; try { JSONObject jsonObject = JSON.parseObject(jsonString); String name = jsonObject.getString("name"); Integer age = jsonObject.getInteger("age"); String gender = jsonObject.getString("gender"); if (name != null && age != null && gender != null) { Person person = new Person(name, age, gender); System.out.println(person); } else { System.out.println("JSON字符串中存在null值或属性不存在。"); } } catch (Exception e) { System.out.println("JSON解析失败:" + e.getMessage()); } } } class Person { private String name; private Integer age; private String gender; public Person(String name, Integer age, String gender) { this.name = name; this.age = age; this.gender = gender; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", gender='" + gender + '\'' + '}'; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值