Java Gson JSONObject 基本用法(Json解析用)

本文详细介绍了如何使用阿里巴巴的Fastjson和Google的Gson库进行JSON字符串的生成与解析。从创建JSONArray和JSONObject,到将JSON转换为Java对象,再到使用Gson进行反序列化和序列化,涵盖了多种数据类型和复杂结构。示例代码清晰展示了各种操作方法。

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

JSONObject JSONArray

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

	// 生成json字符串
	JSONArray jSONArray = JSONArray.parseArray("[\"AAA\",\"BBB\"]");
	System.out.println(jSONArray.getString(0));  // AAA
	
	// 生成json字符串
    JSONObject json = new JSONObject();
    json.put("id", 100);
    json.put("name", "Tony");
    String params = json.toString();
    // 生成一般对象
    UserInfo user = json.toJavaObject(UserInfo.class);
    System.out.println(user.getName());  // Tony

// 将json字符串生成JSONObject和JSONArray
String jsonStr = "{\"balances\":"
        + "[{\"asset\":\"AAA\",\"free\":\"0.00000000\",\"locked\":\"0.00000000\"},"
        + "{\"asset\":\"BBB\",\"free\":\"0.00000000\",\"locked\":\"0.00000000\"},"
        + "{\"asset\":\"CCC\",\"free\":\"0.00000000\",\"locked\":\"0.00000000\"},"
        + "{\"asset\":\"DDD\",\"free\":\"0.00000000\",\"locked\":\"0.00000000\"},"
        + "{\"asset\":\"EEE\",\"free\":\"0.00000000\",\"locked\":\"0.00000000\"}"
        + "]}";
JSONObject jsonData = JSONObject.parseObject(jsonStr);
JSONArray jsonArr = jsonData.getJSONArray("balances");
List<Balance> balances = jsonArr.toJavaList(Balance.class);

Gson

  • 反序列化:解析Json
    Gson gson = new Gson();
    
    // 一般对象
    TradeInfo trade = gson.fromJson("{\"id\":18, \"value\":\"xxxx\"}", TradeInfo.class);
    System.out.println(trade.getValue());  // xxxx
    
    // String对象
    String str = gson.fromJson("{\"value\":\"xxxx\"}", String.class);
    System.out.println(str);  // ? 错了
    
    // 整数对象
    int i = gson.fromJson("{\"id\":18}", int.class);
    System.out.println(i);  // ? 错了
    
    // 数组对象
    String[] strs = gson.fromJson("[\"Android\",\"Java\",\"PHP\"]", String[].class);
    System.out.println(strs);  // Android

    // List对象01
    List<String> strList = gson.fromJson("[\"Android\",\"Java\",\"PHP\"]", new TypeToken<List<String>>() {}.getType());
    System.out.println(strList.get(0));  // Android
    
    // List对象02
    List<String[]> strList = gson.fromJson("[[\"Android\"],[\"Java\"],[\"PHP\"]]", new TypeToken<List<String[]>>() {}.getType());
    System.out.println(strList.get(0)[0]);  // Android

    // 复杂数组对象01
	public class TestRecord {
	    public List<String[]> bids;
	}
    TestRecord tr = gson.fromJson("{\"bids\":[[\"AAA\",\"BBB\"],[\"CCC\",\"DDD\"]]}", TestRecord.class);  // 用 new TypeToken<TestRecord>(){}.getType()) 也行。
    System.out.println(tr.bids.get(0)[0]);  // AAA

	// Map对象
	String jsonStr = "{\"name\":{\"asks\":[[\"AAA\",\"BBB\"],[\"CCC\",\"DDD\"]]}}";
	Map<String, OrderBook> map = gson.fromJson(jsonStr, new TypeToken<Map<String, OrderBook>>(){}.getType());
	System.out.println(map.get("name").asks.get(0)[0]);  // AAA
	
    // TypeToken 的构造方法是protected修饰的,所以上面才会写成new TypeToken<List<String>>() {}.getType() 而不是 new TypeToken<List<String>>().getType()
  • 序列化:生成Json
    Gson gson = new Gson();
    
    // 一般对象
    TradeInfo trade = new TradeInfo(18, "xxxx");
    String jsonStr = gson.toJson(trade);
    
    // String对象
    String jsonStr = gson.toJson("xxxx");

    // 整数对象
    int jsonStr = gson.toJson(18);

	// Map对象
	public class OrderBook {
    	public List<String[]> asks;
	}
	
    String[] strs1 = {"AAA","BBB"};
    String[] strs2 = {"CCC","DDD"};
    
    OrderBook orderBook = new OrderBook();
    orderBook.asks = new ArrayList<String[]>();
    orderBook.asks.add(strs1);
    orderBook.asks.add(strs2);

    Map<String, OrderBook> map = new HashMap<String, OrderBook>();
    map.put("name", orderBook);
    
    String jsonStr = gson.toJson(map);
    System.out.println(jsonStr);  // {"name":{"asks":[["AAA","BBB"],["CCC","DDD"]]}}

  • 依赖包
<!-- pom.xml -->
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
        <!--
        	在Spring boot中已经有限定,不用设置version。
        	<version>2.2.8</version>
        -->
包含以下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、付费专栏及课程。

余额充值