Java下json的解析方法-----GSON与JSONObject

本文介绍Gson库的基本使用方法,包括如何将Java对象转换为JSON字符串及如何将JSON字符串解析为Java对象。同时对比了另一种常用的JSON解析工具——org.json库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GSON:

         Gson是google开发的json格式解析包,其特点是在解析json之前必须知道所传输的json数据格式,并定义一系列层次结构与json层次结构相同的类。换句话说,如果传输的json结构为:

{
    "name":"relin",
    "sex":"male",
    "age":26
}
那么,就必须预先定义一个成员变量名字与json中属性名字完全相同的类:

class Person {
    public String name;
    public String sex;
    public int age;
}

Gson解析json有三个特点:

  •       如果预先定义的类中不包含json中的某个属性,则该属性就不会被解析出来,但是其他成员仍然能正常解析
  •       命名必须完全相同,否则不会被正常解析
  •       类的成员变量可以是public,也可以是private

让我们来看两个简单的解析与反解析过程:

1. 定义类:

package com.relin.gson.data;

public class Person {
	private String name;    
	private int age;    
	private int sex;
	/**     * @return the name     */    
	public String getName() {
		return name+"*****";    
	}    
	
	/**     * @param name the name to set     */   
	public void setName(String name) {  
		this.name = name;  
	}    
	
	/**     * @return the age     */    
	public int getAge() {        
		return age;    
	}    
	
	/**     * @param age the age to set     */    
	public void setAge(int age) { 
		this.age = age;    
		}        
	
	@Override    
	public String toString() {
		return name + ":" + age;  
	}
}

2. String to json:

	private static boolean StringToJson(){
		try{
			String str = "{\"name\":\"name0\",\"age\":0}";
			Gson gson = new Gson();
			Person person= gson.fromJson(str, Person.class);
			System.out.println(person);
		} catch (Exception e){
			return false;
		}
		return true;
	}

3. Json to String:

	private static boolean JsonToString(){
		try{
			Gson gson = new Gson();
			ArrayList<Person> persons = new ArrayList<Person>();
			for (int i = 0; i < 10; i++) {
				Person p = new Person();     
				p.setName("name" + i);     
				p.setAge(i * 5);     
				persons.add(p);
			}
			String str = gson.toJson(persons);
			System.out.println(str);
		} catch (Exception e){
			return false;
		}
		return true;
	}

4. 调用可以如下所示:

package com.relin.gson;

import java.util.ArrayList;

import com.google.gson.Gson;
import com.relin.gson.data.Person;
import com.relin.gson.data.UrlResponse;

public class Example {
	private static boolean JsonToString(){
		try{
			Gson gson = new Gson();
			ArrayList<Person> persons = new ArrayList<Person>();
			for (int i = 0; i < 10; i++) {
				Person p = new Person();     
				p.setName("name" + i);     
				p.setAge(i * 5);     
				persons.add(p);
			}
			String str = gson.toJson(persons);
			System.out.println(str);
		} catch (Exception e){
			return false;
		}
		return true;
	}
	
	private static boolean StringToJson(){
		try{
			String str = "{\"name\":\"name0\",\"age\":0}";
			Gson gson = new Gson();
			Person person= gson.fromJson(str, Person.class);
			System.out.println(person);
		} catch (Exception e){
			return false;
		}
		return true;
	}
public static void main(String agrs[]){StringToJson();
                JsonToString()
        }}


JSONObject

另一种用与解析json的java api是来自org.json。用其相对比较直观,其中包含有个主要的类:

  • JSONObject相当与json中的字典类型
  • JSONArray相当与json中的数组类型

基本用法如下:

            //将String字符串转换为json对象
            JSONObject jsonObject = new JSONObject(strbody);
            //提取int型的属性,其属性名为From,其他boolean等类型也类似
            int from = jsonObject.getInt("From");
            //提取json数组
            JSONArray toData= jsonObject.getJSONArray("ToData");



包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class com.google.gson.FieldNamingStrategy.class com.google.gson.Gson.class com.google.gson.GsonBuilder.class com.google.gson.InstanceCreator.class com.google.gson.JsonArray.class com.google.gson.JsonDeserializationContext.class com.google.gson.JsonDeserializer.class com.google.gson.JsonElement.class com.google.gson.JsonIOException.class com.google.gson.JsonNull.class com.google.gson.JsonObject.class com.google.gson.JsonParseException.class com.google.gson.JsonParser.class com.google.gson.JsonPrimitive.class com.google.gson.JsonSerializationContext.class com.google.gson.JsonSerializer.class com.google.gson.JsonStreamParser.class com.google.gson.JsonSyntaxException.class com.google.gson.LongSerializationPolicy.class com.google.gson.TreeTypeAdapter.class com.google.gson.TypeAdapter.class com.google.gson.TypeAdapterFactory.class com.google.gson.annotations.Expose.class com.google.gson.annotations.SerializedName.class com.google.gson.annotations.Since.class com.google.gson.annotations.Until.class com.google.gson.internal.ConstructorConstructor.class com.google.gson.internal.Excluder.class com.google.gson.internal.JsonReaderInternalAccess.class com.google.gson.internal.LazilyParsedNumber.class com.google.gson.internal.LinkedTreeMap.class com.google.gson.internal.ObjectConstructor.class com.google.gson.internal.Primitives.class com.google.gson.internal.Streams.class com.google.gson.internal.UnsafeAllocator.class com.google.gson.internal.bind.ArrayTypeAdapter.class com.google.gson.internal.bind.CollectionTypeAdapterFactory.class com.google.gson.internal.bind.DateTypeAdapter.class com.google.gson.internal.bind.JsonTreeReader.class com.google.gson.internal.bind.JsonTreeWriter.class com.google.gson.internal.bind.MapTypeAdapterFactory.class com.google.gson.internal.bind.ObjectTypeAdapter.class com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.class com.google.gson.internal.bind.SqlDateTypeAdapter.class com.google.gson.internal.bind.TimeTypeAdapter.class com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.class com.google.gson.internal.bind.TypeAdapters.class com.google.gson.reflect.TypeToken.class com.google.gson.stream.JsonReader.class com.google.gson.stream.JsonScope.class com.google.gson.stream.JsonToken.class com.google.gson.stream.JsonWriter.class com.google.gson.stream.MalformedJsonException.class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值