如何处理JSON解析为空

字典在开发过程中尤为重要.字典的来源有很多,比如:直接创建,NSData,Mode,或者JSON字符串.

现在主要来谈谈用JSON字符串转字典的情况.现在有一个JSON字符串,如下:

{"CoderHG":" 鸿歌","love":"你,我,她","oschinaAddress" :"http://my.oschina.net/CoderHG/blog"}

这个JSON字符串的字典格式为:

{
    "CoderHG": " 鸿歌",
    "love": "你,我,她",
    "oschinaAddress": "http://my.oschina.net/CoderHG/blog"
}

那么问题来了,在代码中应该如何转换呢?转换Cede如下:

    NSString* jsonStr = @"{\"CoderHG\":\" 鸿歌\",\"love\":\"你,我,她\",\"oschinaAddress\" :\"http://my.oschina.net/CoderHG/blog\"}";

    NSData* jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];

    

    NSDictionary* jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];

    

    NSLog(@"\n解析结果 :\n %@", jsonDict);

打印结果:

解析结果 :

 {

    CoderHG = "\U00a0\U9e3f\U6b4c";

    love = "\U4f60,\U6211,\U5979";

    oschinaAddress = "http://my.oschina.net/CoderHG/blog";

}

算是完美!

但是我的问题来了:在上面的JSON字符串中,我希望"love"的value弄成用换行显示,如下:

{"CoderHG":" 鸿歌","love":"你\n\n她","oschinaAddress" :"http://my.oschina.net/CoderHG/blog"}

用上面的Code再次转换:

NSString* jsonStr = @"{\"CoderHG\":\" 鸿歌\",\"love\":\"你\n我\n她\",\"oschinaAddress\" :\"http://my.oschina.net/CoderHG/blog\"}";

    

    NSData* jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];

    NSDictionary* jsonDict = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil];

    NSLog(@"\n二次解析结果 :\n %@", jsonDict);

 

打印结果:

二次解析结果  :

 (null)

这到底是怎么会呢???这才是我写这篇博客的主要目的,当然了.到这里,你应该知道解析出错的原因就是将"love"的value换了一个显示格式而已.那如何去解决呢?

如果你将{"CoderHG":" 鸿歌","love":"你\n\n她","oschinaAddress" :"http://my.oschina.net/CoderHG/blog"}copy到http://www.bejson.com/jsonviewernew/,你会发现是能正常解析的!

在这里,直接给出答案:

在转成jsonData之前,加上这一句就OK了.具体是什么原因,你应该知道!

jsonStr = [jsonStr stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];

 

最终的打印结果:

最终解析结果  :

 {

    CoderHG = "\U00a0\U9e3f\U6b4c";

    love = "\U4f60\n\U6211\n\U5979";

    oschinaAddress = "http://my.oschina.net/CoderHG/blog";

}

 

 

结论:如果,你发现自己在JSON转换的时候,发现一切都正常,解释解析为空的时候,请查看是否用"\n",如果有,需要转义一下!当然,这只是其中的一种可能!

 

完美!

谢谢!

 

 

 

 

 

 

转载于:https://my.oschina.net/CoderHG/blog/737508

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值