json解析问题总结

一、使用gson解析json数据时,如果出现某一个属性为null的情况(且并无报错信息),首先检查json文件的属性名称和实体类的属性名称是否一致。

举例如下(正常情况,此处读取本地的一个json文件):

json文件

{"name":"Tim",
"age":"40",
"job":"basketball",
"hobby":"dai"}

解析代码如下

String jsonstring=FileUtil.readAssets(ctx,"tim.json");
		Gson g=new Gson();
		tim=g.fromJson(jsonstring, Tim.class);

实体类如下

package com.example.jsondemoerror;

public class Tim {
	private String name;
	private String age;
	private String job;
	private String hobby;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public String getHobby() {
		return hobby;
	}
	public void setHobby(String hobby) {
		this.hobby = hobby;
	}
	@Override
	public String toString() {
		return "Tim [name=" + name + ", age=" + age + ", job=" + job
				+ ", hobby=" + hobby + "]";
	}

}

json文件的各属性名称和实体类的名称一致时,解析成功。

若出现名称不一致:

1、json文件的名称写错,实体类未错,比如hobby写为hobb,出现Tim [name=Tim, age=40, job=basketball, hobby=null]。

2、实体类属性名称写错,json未错,比如把hobby写为hobb,出现Tim [name=Tim, age=40, job=basketball, hobb=null]。

二、使用gson可以直接解析出实体类的集合。

json文件

{"name":"Tim",
"age":"40",
"job":"basketball",
"hobby":
[{"name":"sing","time":"1"},
{"name":"dance","time":"1"},
{"name":"swim","time":"1"},
{"name":"dai","time":"1"}]}

实体类如下

package com.example.jsondemoerror;

import java.util.List;

public class Tims {
    private String name;
    private String age;
    private String job;
    private List<Hobby> hobby;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getJob() {
        return job;
    }
    public void setJob(String job) {
        this.job = job;
    }
    public List<Hobby> getHobby() {
        return hobby;
    }
    public void setHobby(List<Hobby> hobby) {
        this.hobby = hobby;
    }
    @Override
    public String toString() {
        return "Tims [name=" + name + ", age=" + age + ", job=" + job
                + ", hobby=" + hobby + "]";
    }

}

解析代码

String jsonstring=FileUtil.readAssets(ctx,"tims.json");
        Gson g=new Gson();
        tims=g.fromJson(jsonstring, Tims.class);
        Log.d("JsonErrorActivity", tims.toString()+tims.getHobby().get(0).getName());

log内容

Tims [name=Tim, age=40, job=basketball, hobby=[Hobby [name=sing, time=1], Hobby [name=dance, time=1], Hobby [name=swim, time=1], Hobby [name=dai, time=1]]]sing

三、使用gson可以解析出实体类。

json文件

{"name":"Tim",
"age":"40",
"job":"basketball",
"hobby":
{"name":"sing","time":"1"}
}

实体类

package com.example.jsondemoerror;

public class Timsh {
    private String name;
    private String age;
    private String job;
    private Hobby hobby;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getJob() {
        return job;
    }
    public void setJob(String job) {
        this.job = job;
    }
    public Hobby getHobby() {
        return hobby;
    }
    public void setHobby(Hobby hobby) {
        this.hobby = hobby;
    }
    @Override
    public String toString() {
        return "Timsh [name=" + name + ", age=" + age + ", job=" + job
                + ", hobby=" + hobby + "]";
    }

}

解析代码

String jsonstring=FileUtil.readAssets(ctx,"timsh.json");
        Gson g=new Gson();
        timsh=g.fromJson(jsonstring, Timsh.class);
        Log.d("JsonErrorActivity", timsh.toString()+timsh.getHobby().getName());

log内容

Timsh [name=Tim, age=40, job=basketball, hobby=Hobby [name=sing, time=1]]sing

时间: 2024-08-26 09:07:52

json解析问题总结的相关文章

json解析 本地文件和网上文件(通过接口)

json解析 对本地文件解析 NSString *path =[[NSBundle mainBundle] pathForResource:@"movielist" ofType:@"txt"]; // 第二个参数,制定一个容器来接收解析后的数据 NSMutableDictionary *dic =[NSJSONSerialization JSONObjectWithData:data option:NSJSONReadingMutableContainers er

Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所帮助. 首先按照惯例先来简单了解一些AsyncHttpClient网络框架的一些知识. 1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-a

Linux json解析jq

jq是一个linux下很方便的json解析器,平时看json文件都是一行混在一起的,非常不适合阅读. https://stedolan.github.io/jq/download/ 直接到官网上下载,然后像运行普通程序一样运行就可以了. 1.最常用的用法是 ./jq . filename 格式化输出filename 2.将格式化的json输出,反向转换变成一行.(什么,没什么卵用,呵呵,真正碰到需要用的时候愁死你) ./jq -c . filename 还有很多用法,直接上官方说明: https

Java基础知识强化103:JSON解析框架汇总

1.Gson Gson是Google提供的一个能够将Java对象转换成相应JSON表达形式的一个开源Java类库,当然用Gson也能将JSON字符串转换成与之等价的Java对象.Gson对于任何Java对象都有效,包括那些预先存在没有源代码的对象. 现在已经有一些能将Java对象转换成JSON的开源项目了.但是大多数项目都要求你在类文件中加入Java注解,而当你无法改动源代码的时候这是无法做到的.并且它们也不支持Java泛型.但是Gson却将这两点作为自己非常重要的设计目标. 目标 使用toJs

Android 之json解析2

JSON(JavaScript Object Notation) 定义:字符串 键值对 解析方法有JSON,谷歌GSON,阿里巴巴FastJSON 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性. 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换. JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. Json建构于两种结构: 1.“名称/值”对的集合(A collection of name

核心技术篇:6.android网络编程之json解析

前言:好一段时间没写博客了,说最近挺忙的,感觉像是个借口,每天还是同样的24个小时,每天还是同样的5:30就准时下班,每天晚上还是有大量的空余时间...最直接的原因就是,最近堕落了.脑子里也时常会有很多想法浮现,都是些比较实际的想法,但往往就是浮现那一下,心情激动了一下,心里默默告诉自己,有时间就要这么做...好多想法都被一些其它的诱惑给磨灭掉了,要么是打球.要么是看电影.要么是处理一些乱七八糟的事去了.总之,近段时间,花在技术上的时间很少很少,好好反思下. 前段时间,来了一位新疆的客户,提出了

Android JSON 解析库的使用 - Gson 和 fast-json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C.C++.C#.Java.JavaScript.Perl.Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率). GSON是由谷歌官方推出的 JSON 与 Java 对象转化的 Java类库 fast-json 阿里推

Cocos2d-x3.0 Json解析

在Cocos2dx3.0下,JSON解析库官方已经集成好了.我们引用就OK. JSON文件hello.json内容 {"pets":["dog","cat"],"stuInfo":{"stuAge":"23","stuName":"zhangsan","birthday":"1990-01-12"},&quo

JSON解析---初识

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式 完全独立于语言的文本格式 易于人阅读和编写 易于解析和生成 (网络传输速度快) JSON语法规则 数据在 名称/值 对中 数据有逗号分隔 花括号保存对象 方括号保存数组 以下是一个.JSON 文件 { "class1":[ { "name":"zhangsan", "age":"14", "tel&quo

iOS之网络数据下载和JSON解析

iOS之网络数据下载和JSON解析 简介 在本文中笔者主要给大家介绍IOS如何利用NSURLConnection从网络上下载数据,如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示. 涉及到的知识点: 1.NSURLConnection 异步下载和封装 2.JSON格式和JSON格式解析 3.数据显示和使用SDWebImage异步显示图片 内容 1.网络下载基础知识介绍 什么是网络应用? 需要通过联网进行操作的应用 网络应用的程序结构? c/s结构:即客户端/服务端 常见的