JSON数据解析攻略:从入门到精通

发布时间:2024-04-09 16:12:29 来源:网络

在不断演进的软件开发领域中,JSON(JavaScript对象表示法)已经成为了主导的数据交互格式,占到了数据传输交易量的主要部分。因此,对JSON解析技能的深入掌握对提升开发效率有重大影响。本文将详细解读JSON数据的构成及高效解析方法,旨在为广大读者提供更深层次的理解与掌握此项关键技术的机会。

1什么是JSON数据?

JSO (JavaScript Object Notation)是一种基于特定语法规则创建的、独立于编程语言的简易数据交换格式,它将数据看做字符串,并以各种分隔符号对其进行元素解析。其中最常用的标记有方括号[]和花括号{},这两个标记在与数组和对象这两种基础数据类型相匹配时表现出色。

2 JSON数据的格式

{
  "paramz": {
    "feeds": [
      {
        "id": 299076,
        "oid": 288340,
        "category": "article",
        "data": {
          "subject": "荔枝新闻3.0:不止是阅读",
          "summary": "江苏广电旗下资讯类手机应用“荔枝新闻”于近期推出全新升级换代的3.0版。",
          "cover": "/Attachs/Article/288340/3e8e2c397c70469f8845fad73aa38165_padmini.JPG",
          "pic": "",
          "format": "txt",
          "changed": "2015-09-22 16:01:41"
        }
      }
    ],
    "PageIndex": 1,
    "PageSize": 20,
    "TotalCount": 53521,
    "TotalPage": 2677
  }
}

依据JSON架构设计,易于理解的简单变量类型如字符串、数字、布尔值以及特殊值null得到支持;此外,亦备有结构化的对象(如键值对形式)及有序的数值序列(以数组形式表述)等元素。例:

json
{
    "name":"Alice",
    "age": 25,
    "isStudent": true,
课程涵盖了数学,英语和历史等多个领域。
}
这里写图片描述

请留意如下展示详细个人资料、年龄数据及身份验证记录并包括所有课程相关细节的JSON实例。

3如何解析JSON数据?

public class JsonUtils {
    /**
     * 根据json数据解析返回一个List>集合
     * @param json  json数据
     * @return
     */
    public static List<HashMap<String, Object>> getJsonList(String json) {
        List<HashMap<String, Object>> dataList;
        dataList = new ArrayList<>();
        try {
            JSONObject rootObject = new JSONObject(json);
            JSONObject paramzObject = rootObject.getJSONObject("paramz");
            JSONArray feedsArray = paramzObject.getJSONArray("feeds");
            for (int i = 0; i < feedsArray.length(); i++) {
                JSONObject sonObject = feedsArray.getJSONObject(i);
                JSONObject dataObject = sonObject.getJSONObject("data");
                String subjectStr = dataObject.getString("subject");
                String summaryStr = dataObject.getString("summary");
                String coverStr = dataObject.getString("cover");
                HashMap<String, Object> map = new HashMap<>();
                map.put("subject", subjectStr);
                map.put("summary", summaryStr);
                map.put("cover", coverStr);
                dataList.add(map);
            }
            return dataList;
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
}

诸多行业知名的工具和库(如JSONObject、JSONArray、GSON等)均能有效解析JSON数据。本文将深入探讨应用上述工具高效分析的具体途径。

4使用JSONObject解析

JSONObject,专属于安卓的这一独特类别,其主要功能是精准地描绘实体键值对。利用该类别的独特技术,我们可以方便快捷地检索和解析对象内部的键值对信息,如同:

```java

对名为'jsonString'的JSON数据结构进行了精确匹配和整合处理,该数据中包含两个关键字部件:"姓名"及"年龄",具体数值设置为"Bob"以及30。

通过运用JSON对象技术,我们得以方便快捷地将JSON字符串转化为真实的JSON对象。该过程的详细实现方式如下述:

public class DataModel {
    /**
     * subject : "荔枝新闻3.0:不止是阅读"
     * summary : "江苏广电旗下资讯类手机应用“荔枝新闻”于近期推出全新升级换代的3.0版。"
     * cover : "/Attachs/Article/288340/3e8e2c397c70469f8845fad73aa38165_padmini.JPG"
     * pic :
     * format : video
     * changed : 2015-11-07 14:35:22
     */
    public String subject;
    public String summary;
    public String cover;
    public String pic;
    public String format;
    public String changed;
    @Override
    public String toString() {
        return "DataModel{" +
                "subject='" + subject + '\'' +
                ", summary='" + summary + '\'' +
                ", cover='" + cover + '\'' +
                ", pic='" + pic + '\'' +
                ", format='" + format + '\'' +
                ", changed='" + changed + '\'' +
                '}';
    }
}

将json格式化字符串转化为JSON对象,可使用如下代码:

JSONObject jsonObject = new JSONObject((jsonString));

此功能将获取于JSON中名为'name'的标签字符串。具体过程是:通过预设的变量'string name',将获取的'name'标签内容格式化并存储于其中。

 /**
     * 根据json对象获取List集合
     * @param json 数据
     * @return
     */
    public static List<DataModel> getGsonList(String json) {
        List<DataModel> dataList;
        try {
            JSONObject rootObject = new JSONObject(json);
            JSONObject paramzObject = rootObject.getJSONObject("paramz");
            /**
             * JSONArray的构造方法获取JSONArray对象
             */
            JSONArray jsonArray = new JSONArray(paramzObject.getString("feeds"));
            Log.i(TAG, "jsonarray.length():"+jsonArray.length());
            /**
             * 获取JSONObject对象的属性关键字
             */
            Iterator<String> iterators = paramzObject.keys();
            while (iterators.hasNext()) {
                Log.i(TAG, "iterators: " + iterators.next());
            }
            JSONArray feeds = paramzObject.getJSONArray("feeds");
            dataList = new ArrayList<>();
            for (int i = 0; i < feeds.length(); i++) {
                JSONObject jsonObject = feeds.getJSONObject(i);
                DataModel model = new Gson().fromJson(jsonObject.getString("data"), new TypeToken<DataModel>() {
                }.getType());
                Log.i(TAG, "DataModel: " + model.toString());
                dataList.add(model);
            }
            return dataList;
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

获取json对象中的年龄值,赋给变量age。

凭借具备以上代码特性,我们便可轻松获取JSON对象中的"name"和"age"字段信息。

5使用JSONArray解析

除 JSONObject以外,JSONArray亦被广泛应用于解析JSON数组类型的数据。其简便易用之处在于:可以轻松提取数组中的特定数值以及对象详情。

JSON 字符串遵循如下形式:jsonArrayString =["苹果","香蕉","橙子"];

成功建立了一个名称为`newJSONArray`的新个体,该个体所携带的唯一参数即一串名为`jsonArrayString`的字符型数据。

借助深度遍历JSON数组的方法,可用变量i标记当前元素,累加计数值直至达到上限。每次遍历周期结束时,i皆会自动递增。

让"水果"这一字串成为变量'fruit'的设定值,运用名为'jsonArray.getString(i)'的函数对数组进行高效的数据提取。

System.out.println(fruit);

通过以上代码片段,我们可以逐个输出数组中的水果名称。

6使用GSON解析

作为谷歌发布的创新型 Java GSON 工具包,其主要功能在于简化 JSON 数据处理和交换过程。GSON 的强大功能体现在能够准确无误地实现 Java 对象至JSON 文本及逆向序列化的双向转化。检索真实案例,展示GSON在实际应用环境下的关键价值。

首先,借助GSONFormat工具创建"HomeadListModel"java类,以适应待解析的JSON格式数据。

7总结与展望

{
    "homeadlist": [
        {
            "id": 1,
            "imgurl": "/img/homead/a73b3f1d-0f14-429d-9d0f-70643fb0f0eb.jpg",
            "jumpflag": 0,
            "jumpurl": "",
            "posflag": 1,
            "remark": "1111",
            "cityid": 1
        },
        {
            "id": 12,
            "imgurl": "/img/homead/eb442fbf-49db-4ba6-a102-d781505f426d.jpg",
            "jumpflag": 0,
            "jumpurl": "",
            "posflag": 2,
            "remark": "",
            "cityid": 1
        },
        {
            "id": 14,
            "imgurl": "/img/homead/68109460-635d-4c5c-8be8-64d7c7889d18.jpg",
            "jumpflag": 0,
            "jumpurl": "http://shiranlife.kuaizhan.com/",
            "posflag": 4,
            "remark": "",
            "cityid": 1
        }
    ]
}

本文详细阐述了JSON数据的特点以及解析过程,旨在深化理解和运用此项技术,提升软件开发效率。深入研究并实践应用JSON技术,必将在竞争激烈的软件开发环境中脱颖而出。

© 版权声明
评论 抢沙发
加载中~
每日一言
不怕万人阻挡,只怕自己投降
Not afraid of people blocking, I'm afraid their surrender