如何解析返回的JSON数据?

news/2025/2/26 13:32:15

解析返回的JSON数据是爬虫和API开发中的常见任务。在Java中,可以使用多种库来解析JSON数据,例如 JacksonGsonorg.json。以下是使用这些库解析JSON数据的详细步骤和示例代码。


1. 使用Jackson解析JSON数据

Jackson 是一个高性能的JSON处理库,支持将JSON数据映射到Java对象(反序列化)和将Java对象转换为JSON(序列化)。

(1)添加依赖

pom.xml中添加Jackson的依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.12.3</version>
</dependency>

(2)定义Java对象

根据API返回的JSON结构,定义对应的Java对象。例如,假设API返回以下JSON数据:

{
    "item": {
        "num_iid": "123456789",
        "title": "商品标题",
        "price": "99.99",
        "pic_url": "http://example.com/image.jpg",
        "description": "商品详细描述"
    }
}

可以定义以下Java类:

public class Item {
    private String numIid;
    private String title;
    private String price;
    private String picUrl;
    private String description;

    // Getters and Setters
}

(3)解析JSON数据

使用ObjectMapper解析JSON数据:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonParser {
    public static void main(String[] args) {
        String json = "{...API返回的JSON数据...}";

        try {
            ObjectMapper mapper = new ObjectMapper();
            Item item = mapper.readValue(json, Item.class);
            System.out.println("商品ID: " + item.getNumIid());
            System.out.println("商品标题: " + item.getTitle());
            System.out.println("商品价格: " + item.getPrice());
            System.out.println("商品图片: " + item.getPicUrl());
            System.out.println("商品描述: " + item.getDescription());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 使用Gson解析JSON数据

Gson 是Google提供的一个轻量级JSON处理库,支持将JSON数据映射到Java对象和将Java对象转换为JSON。

(1)添加依赖

pom.xml中添加Gson的依赖:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.6</version>
</dependency>

(2)定义Java对象**

与Jackson类似,定义与JSON结构对应的Java类:

public class Item {
    private String numIid;
    private String title;
    private String price;
    private String picUrl;
    private String description;

    // Getters and Setters
}

(3)解析JSON数据**

使用Gson解析JSON数据:

import com.google.gson.Gson;

public class JsonParser {
    public static void main(String[] args) {
        String json = "{...API返回的JSON数据...}";

        Gson gson = new Gson();
        Item item = gson.fromJson(json, Item.class);

        System.out.println("商品ID: " + item.getNumIid());
        System.out.println("商品标题: " + item.getTitle());
        System.out.println("商品价格: " + item.getPrice());
        System.out.println("商品图片: " + item.getPicUrl());
        System.out.println("商品描述: " + item.getDescription());
    }
}

3. 使用org.json解析JSON数据

org.json 是一个简单的JSON处理库,适合解析简单的JSON数据。

(1)添加依赖

pom.xml中添加org.json的依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
</dependency>

(2)解析JSON数据**

使用JSONObject解析JSON数据:

import org.json.JSONObject;

public class JsonParser {
    public static void main(String[] args) {
        String json = "{...API返回的JSON数据...}";

        JSONObject obj = new JSONObject(json);
        JSONObject item = obj.getJSONObject("item");

        System.out.println("商品ID: " + item.getString("num_iid"));
        System.out.println("商品标题: " + item.getString("title"));
        System.out.println("商品价格: " + item.getString("price"));
        System.out.println("商品图片: " + item.getString("pic_url"));
        System.out.println("商品描述: " + item.getString("description"));
    }
}

4. 处理嵌套和数组

如果JSON数据包含嵌套对象或数组,可以使用以下方法解析:

(1)嵌套对象

假设JSON数据如下:

{
    "item": {
        "num_iid": "123456789",
        "title": "商品标题",
        "price": "99.99",
        "pic_url": "http://example.com/image.jpg",
        "attributes": {
            "color": "red",
            "size": "M"
        }
    }
}

可以使用以下代码解析:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonParser {
    public static void main(String[] args) {
        String json = "{...API返回的JSON数据...}";

        ObjectMapper mapper = new ObjectMapper();
        Item item = mapper.readValue(json, Item.class);

        System.out.println("商品ID: " + item.getNumIid());
        System.out.println("商品标题: " + item.getTitle());
        System.out.println("商品价格: " + item.getPrice());
        System.out.println("商品图片: " + item.getPicUrl());
        System.out.println("商品颜色: " + item.getAttributes().getColor());
        System.out.println("商品尺码: " + item.getAttributes().getSize());
    }
}

class Item {
    private String numIid;
    private String title;
    private String price;
    private String picUrl;
    private Attributes attributes;

    // Getters and Setters
}

class Attributes {
    private String color;
    private String size;

    // Getters and Setters
}

(2)数组

假设JSON数据如下:

{
    "items": [
        {
            "num_iid": "123456789",
            "title": "商品标题1",
            "price": "99.99"
        },
        {
            "num_iid": "987654321",
            "title": "商品标题2",
            "price": "88.88"
        }
    ]
}

可以使用以下代码解析:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonParser {
    public static void main(String[] args) {
        String json = "{...API返回的JSON数据...}";

        ObjectMapper mapper = new ObjectMapper();
        Items items = mapper.readValue(json, Items.class);

        for (Item item : items.getItems()) {
            System.out.println("商品ID: " + item.getNumIid());
            System.out.println("商品标题: " + item.getTitle());
            System.out.println("商品价格: " + item.getPrice());
        }
    }
}

class Items {
    private List<Item> items;

    public List<Item> getItems() {
        return items;
    }
}

class Item {
    private String numIid;
    private String title;
    private String price;

    // Getters and Setters
}

5. 错误处理

在解析JSON数据时,可能会遇到以下问题:

  • JSON格式错误。

  • 缺少某些字段。

  • 字段类型不匹配。

为避免这些问题,可以在代码中添加异常处理:

try {
    ObjectMapper mapper = new ObjectMapper();
    Item item = mapper.readValue(json, Item.class);
    System.out.println("商品标题: " + item.getTitle());
} catch (Exception e) {
    System.err.println("解析JSON失败: " + e.getMessage());
}

总结

解析JSON数据是开发中常见的任务,Java提供了多种库来处理JSON,如 JacksonGsonorg.json。选择合适的库取决于你的具体需求:

  • Jackson:功能强大,支持复杂的数据结构。

  • Gson:简单易用,适合轻量级应用。

  • org.json:适合解析简单的JSON数据。

在实际开发中,建议根据JSON数据的结构和复杂性选择合适的库,并在代码中添加异常处理,以确保程序的稳定性。


http://www.niftyadmin.cn/n/5868771.html

相关文章

《论区块链技术及应用》审题技巧 - 系统架构设计师

区块链技术及应用论题写作框架 一、考点概述 本论题“区块链技术及应用”主要考察软件测试工程师对区块链技术的理解及其在软件项目中的实际应用能力。论题涵盖了多个关键方面&#xff0c;首先要求考生对区块链技术有全面的认识&#xff0c;包括但不限于其作为分布式记账技术…

2025系统架构师(一考就过):案例之三:架构风格总结

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式&#xff0c;按照软件架构风格&#xff0c;物联网系统属于&#xff08; &#xff09;软件架构风格。 A:层次型 B:事件系统 C:数据线 D:C2 答案&#xff1a;A 解析&#xff1a; 物联网分为多个层次&#xff0…

ARM Cortex-M处理器中的MSP和PSP

在ARM Cortex-M系列处理器中&#xff0c;MSP&#xff08;主堆栈指针&#xff09;和PSP&#xff08;进程堆栈指针&#xff09;是两种不同的堆栈指针&#xff0c;主要用于实现堆栈隔离和提升系统可靠性。以下是它们的核心区别和应用场景&#xff1a; 1. 基本定义 MSP&#xff08;…

如何通过提示词更好地利用AI

如何通过提示词工程释放AI的全部潜力&#xff1a;7个深度优化技巧 前言&#xff1a;为什么提示词决定AI的输出质量&#xff1f; 在人工智能对话系统的使用中&#xff0c;提示词&#xff08;Prompt&#xff09;就像开启宝藏的密码钥匙。研究表明&#xff0c;优化后的提示词可使…

Spring MVC框架二:创建第一个MVC程序

精心整理了最新的面试资料&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 有两种方式 利用配置 1、利用IDEA新建一个Maven项目&#xff0c;添加一个web支持 2、导入常用的依赖 <dependencies><dependency><groupId>junit&…

鸿蒙ArkTs如何实现pdf预览功能?

鸿蒙ArkTs如何实现pdf预览功能&#xff1f; 前言PDFKit运行示例代码报错真机运行先看效果一、预览本地pdf文件二、预览线上的pdf文件三、预览沙箱目录中pdf的文件(重点)效果中的整体代码总结 Harmony OS NEXT版本&#xff08;接口及解决方案兼容API12版本或以上版本) 前言 在开…

Project Reactor中 map、flatMap、concatMap 和 flatMapSequential 的区别

在 Project Reactor&#xff08;Reactive Streams 的实现库&#xff0c;常用于 Spring WebFlux&#xff09;中&#xff0c;map、flatMap、concatMap 和 flatMapSequential 是常用的操作符&#xff0c;但它们的功能和行为有显著区别。以下是它们的详细对比&#xff1a; 1. 功能对…

SOME/IP-SD -- 协议英文原文讲解2

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.2 S…