JSON数据造假和解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 客户端开发通常要从服务器获取数据,所以就需要调用后台的接口,然后获得后台返回的数据,根据这些数据的格式进行JSON解析。由于后台返回的数据会有不同的格式,所以前端也要采取不同的JSON.parse()方法进行解析。

客户端开发通常要从服务器获取数据,所以就需要调用后台的接口,然后获得后台返回的数据,根据这些数据的格式进行JSON解析。

由于后台返回的数据会有不同的格式,所以前端也要采取不同的JSON.parse()方法进行解析。

首先,来讲一下JSON数据。

简单的JSON数据就像下面这种,我们称之为名称/键对:

{ "name":"Sherry" , "password":"123456" }
我们在客户端解析的时候可以新建一个如下的一个对象类:

public class UserModel {
    
    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
然后把获取到的数据data进行数据解析,方法如下(其中user是UserModel的一个对象):

user = JSON.parseObject(data, UserModel.class);
解析出来后我们就可以在相应的Activity或Fragement界面对这个user进行使用,通过user.get()方法把从后台获取到的name和password值赋值给我们想要显示的地方。就比如我们写了一个TextView用来显示name,只需要

TextView tvName = (TextView)findViewById(R.id.***);

tvName.setText(model.getName());

除了上面这种简单的传递对象的JSON格式,我们也经常会遇到传递数组的情况,这种情况比传递名称/键对相对来说复杂一点,类似于下面这样:

{
"userList": [
{ "name":"Sherry" , "password":"123456" },
{ "name":"Anna" , "password":"654321" }
]
}
这其实就是一个List<UserModel>的数组,所以我们像下面这种方式对这个数组进行JSON解析(其中list是Lis<UserModel>的一个对象):

list = JSON.parseObject(data, new TypeReference<List<UserModel>>() {
});
代码中的TypeReference可以用来应对复杂的泛型,通过解析我们可以把这个list以及其中的数据放到我们想要设置的地方。这些都是相对比较简单的数据,所以来说一下数组和名称/键值结合一块用的,示例的返回数据如下:

{
    "hobby": [
        {
            "name": "Sherry",
            "password": "123456",
            "hobby": {
                "id": "1",
                "hobbyName": "basketball"
            }
        }
    ]
}

对于这样的一串数据,首先我们要看最外层的是数组类型还是名称/键值对象,由于上面的数据最外层是由"[ ]"括起来的,所以user_hobby很明显是一个数组,然后在这个数组里面有三个字段:name、password、hobby,在hobby里面最外层又是由"{ }"组成的,因此hobby是一个名称/键对。我们可以有里及外的剖析:

首先可以新建一个HobbyModel对象类,其中添加id和hobbyName这两个字段和他们的set/get方法,这个就不说了,和上面的UserModel类似,然后我们可以再新建一个AboutMeModel对象类,不同的是我们的字段有了一些变化,主要代码如下:

private String name;
private String password;
private List<HobbyModel> list;
同样的,我们可以用下面这条语句取到我们想要的值:

list = JSON.parseObject(data, new TypeReference<List<AboutMeModel>>() {
});

那么如何拿到这些数据呢?数组的话我们可以用for循环,比如我们要取到“Sherry”这条数据,就可以用for循环,也就是list.get(0).getName(),而如果要取到hobbyName,也就是list.get(0).getHobby().get(0).getHobbyName()。

不过由于我们是要调后台接口的,所以有时候后台传送的数据不符合我们的要求,为了避免这个问题,我们可以自己制造JSON假数据。首先我们假设我们希望后台传给我们的数据是上面那一条,我们可以把从后台获取的data重新赋值,代码如下:

String data = "{\"hobby\": "
        + "[{\"name\": \"Sherry\","
        + "\"password\": \"123456\","
        + "\"hobby\":" +
        "{\"id\": \"1\","
        + "\"hobbyName\": \"basketball\""
        + "}}]}";
在上面的代码中有很多“\",这是因为我们的数据中有一些数据是String类型的,需要有""包裹,而单独使用“”会引起报错,所以需要“\"进行转义,\”也就是我们String语句中的“。

以上就是我关于JSON解析的一些小见解,有不对的地方欢迎指正。

list = JSON.parseObject(data, new TypeReference<List<UserModel>>() {
});

目录
相关文章
|
2月前
|
自然语言处理 数据可视化 前端开发
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
合合信息的智能文档处理“百宝箱”涵盖文档解析、向量化模型、测评工具等,解决了复杂文档解析、大模型问答幻觉、文档解析效果评估、知识库搭建、多语言文档翻译等问题。通过可视化解析工具 TextIn ParseX、向量化模型 acge-embedding 和文档解析测评工具 markdown_tester,百宝箱提升了文档处理的效率和精确度,适用于多种文档格式和语言环境,助力企业实现高效的信息管理和业务支持。
4014 5
从数据提取到管理:合合信息的智能文档处理全方位解析【合合信息智能文档处理百宝箱】
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
21天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
22天前
|
存储 分布式计算 Java
存算分离与计算向数据移动:深度解析与Java实现
【11月更文挑战第10天】随着大数据时代的到来,数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构,即计算资源与存储资源紧密耦合,在处理海量数据时逐渐显露出其局限性。为了应对这些挑战,存算分离(Disaggregated Storage and Compute Architecture)和计算向数据移动(Compute Moves to Data)两种架构应运而生,成为大数据处理领域的热门技术。
40 2
|
25天前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
28天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
104 1
|
11天前
|
数据采集 存储 自然语言处理
基于Qwen2.5的大规模ESG数据解析与趋势分析多Agent系统设计
2022年中国上市企业ESG报告数据集,涵盖制造、能源、金融、科技等行业,通过Qwen2.5大模型实现报告自动收集、解析、清洗及可视化生成,支持单/多Agent场景,大幅提升ESG数据分析效率与自动化水平。
|
18天前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
在Java中处理JSON数据:Jackson与Gson库比较
|
28天前
|
JSON 前端开发 JavaScript
API接口商品详情接口数据解析
商品详情接口通常用于提供特定商品的详细信息,这些信息比商品列表接口中的信息更加详细和全面。以下是一个示例的JSON数据格式,用于表示一个商品详情API接口的响应。这个示例假定API返回一个包含商品详细信息的对象。

推荐镜像

更多