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>
        -->
1、指数名称:北京大学数字普惠金融指数 2、课题组:本指数北京大学数字金融研究中心蚂蚁科技集团研究院组成的联合课题组负责编制,课题组顾问包括北京大学数字金融研究中心主任黄益平,蚂蚁集团研究院院长李振华。第一期指数2011-2015)课题组成员主要包括:郭峰、孔涛、王靖一、张勋、程志云、阮方圆、孙涛、王芳。第二期到第六期指数(2016-2023)课题组成员主要包括:郭峰、王靖一、程志云、李勇国、王芳。课题组也获得了北京大学蚂蚁集团多位同事的技术支持。 3、指数属性:这套指数包括数字普惠金融指数,以及数字金融覆盖广度数字金融使用深度以及普惠金融数字化程度;此外使用深度指数中还包含支付、信贷、保险、信用、投资、货币基金等业务分类指数;但由于监管公司数据安全审核等方面的原因,2019-2023的信用货币基金分指数,没有对外公布。 4、指数范围:中国内地31个省(直辖市、自治区,简称“省”)、337个地级以上城市(地区、自治州、盟等,简称“城市”),以及约2800个县(县级市、旗、市辖区等,简称“县域”);部分地区数据存在缺失;港澳台地区数据暂未包括。 5、时间跨度:省级城市级指数时间跨度为2011-2023,县域指数时间跨度为2014-2023。 6、地区代码说明:在2011-2023期间,中国部分地区进行了“撤地设市”“县(市)改区”等改革,调整了地区名称行政区划代码,但并不影响本指数统计;本表中城市代码同时保留了20142018两个版本,县域名称行政区划代码则以2014底的代码为准,以方便使用者合并其他经济社会数据进行分析。 7、引用说明:欢迎各界人士使用指数,如有使用本数据,请注明所用数据为“北京大学数字普惠金融指数”;同时烦请按照以下文献引用方式引用我们的成果:郭峰、王靖一、王芳、孔涛、张勋、程志云,《测度中国数字普惠金融发展: 指数编制与空间特征》,《经济学季刊》,2020第19卷第4期,第1401-1418页。 8、指数包括: index_aggregate(数字金融发展总指数), coverage_breadth(数字金融覆盖广度指数,二级维度3-1), usage_depth(数字金融使用深度指数,二级维度3-2), payment(电子支付指数),insurance(网络保险指数), monetary_fund,investment(网络投资指数), credit(网络信贷指数), credit_investigation, digitization_level(普惠金融数字化程度指数,二级维度3-3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值