android json字符串转成json对象_如何用Java快速解析json格式字符串?

json全称JavaScript Data Notation,汉译为“JS对象简谱”,是一种轻量级的数据交换格式。

在前后端开发中,json常用于数据传输。

此外,json也是一种重要的数据存储格式。

0f6de31a5bb9e4728af7bf152db940bf.png

JSON是一种轻量级的数据交换格式

json的基本格式是内部存储键值对,还可以包含多个json对象。json格式比较适合与Java对象之间进行转换。

在Java开发中,经常会遇到解析json字符串的问题。

这里提供一个案例,实现用Java轻松解析json字符串。

在案例中,获取json文件里的键floorTitle及其对应data里的skuId。

由于该案例使用org.json的jar包,因此需要将该jar包作为依赖环境导入项目中。

同时,案例还需要一个json格式的文件store.json。

上述资源如有需要,请予以留言。

由于案例需要解析json文件里的floorTitle及skuId,因此自定义一个类Goods,设计相应的成员变量:

package test1;/** * @author lizhangyong* @version 2020年5月13日 下午1:14:18 * */import java.util.List;public class Goods {private String floorTitle;private List skuIdList;public String getFloorTitle() {return floorTitle;}public void setFloorTitle(String floorTitle) {this.floorTitle = floorTitle;}public List getSkuIdList() {return skuIdList;}public void setSkuIdList(List skuIdList) {this.skuIdList = skuIdList;}public Goods(String floorTitle, List skuIdList) {super();this.floorTitle = floorTitle;this.skuIdList = skuIdList;}public Goods() {super();}@Overridepublic String toString() {return "Goods [floor, skuIdList=" + skuIdList + "]";}}

接下来,写一个工具类JsonUtil,用来读取json文件,获取里面的json字符串:

package test1;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;/** * @author lizhangyong * @version 2020年5月12日 下午10:14:45 *  */public class JsonUtil {public static String readJsonFile(File jsonFile) {// 要返回的字符串String jsonStr = "";try {// 用来拼接字符串StringBuffer sb = new StringBuffer();// 用缓冲输入流逐行读取文件BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(jsonFile), "utf-8"));String line = "";line = reader.readLine();while (line != null) {sb.append(line);line = reader.readLine();}// 读完文件关流reader.close();jsonStr = sb.toString();return jsonStr;} catch (Exception e) {e.printStackTrace();return null;}}}

最后,写个测试类Test,就可以了:

package test1;import java.io.File;import java.util.ArrayList;import java.util.List;import org.json.JSONArray;import org.json.JSONObject;import test1.JsonUtil;/** * @author lizhangyong * @version 2020年5月12日 下午10:14:29 *  */public class Test {public static void main(String[] args) throws Exception {// 获取文件的绝对路径String path = Thread.currentThread().getContextClassLoader().getResource("test1/store.json").getPath();/* * 调用工具类,读取json文件里的内容 */String jsonStr = JsonUtil.readJsonFile(new File(path));// System.out.println(jsonStr);// 基于json字符串构建JSONObject对象JSONObject jsonObject = new JSONObject(jsonStr);// 获取result对应的JSONObject对象JSONObject resultJSONObject = jsonObject.getJSONObject("result");// 获取JSONObject对象里的data数组JSONArrayJSONArray dataJsonArray = resultJSONObject.getJSONArray("data");// 将每个商品json对象转换为Goods对象,存到List集合里List goodsList = new ArrayList<>();// 遍历data数组JSONArrayfor (int i = 0; i < dataJsonArray.length(); i++) {// 获取data数组JSONArray里的每一个json对象JSONObject childJsonObject = dataJsonArray.getJSONObject(i);//判断json对象里是否包含floorTitle键if (childJsonObject.has("floorTitle")) {Goods goods = new Goods();goodsList.add(goods);String floorTitle = childJsonObject.getString("floorTitle");goods.setFloorTitle(floorTitle);//判断json对象里是否包含data键if (childJsonObject.has("data")) {JSONArray jsonArray = childJsonObject.getJSONArray("data");if (jsonArray == null || jsonArray.length() == 0) {continue;} else {List skuIdList = new ArrayList();goods.setSkuIdList(skuIdList);for (int j = 0; j < jsonArray.length(); j++) {JSONObject jsonObject2 = jsonArray.getJSONObject(j);String skuId = jsonObject2.getString("skuId");skuIdList.add(skuId);}}}}}System.out.println(goodsList);System.out.println("=========");for (Goods goods : goodsList) {if ("买赠".equals(goods.getFloorTitle())) {System.out.println(goods);}}}}

案例运行效果,请见控制台打印输出:

07b851a49d1b217cff5a5acd8654fe2f.png

Java解析json字符串的控制台输出

可以看到,不仅可以获取json格式文件里所需的全部信息,还可以有针对性地获取其中的某一部分信息。你学会了吗?如有问题,请留言。

26d4cf43c6110e04c09ceb2ef79d1226.png

Java源于1995

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值