Android 解析JSON

Android 解析JSON数据 使用JSONObject解析JSON数据,通过GSON去解析JSON数据。 阅读详情

一、什么是JSON?

JSON是JavaScript Object Notation的简称,起源于js(javascript)它是一种轻量级的数据交换格式,JSON不仅在js中广泛使用,同时还在其他领域得到广泛使用,如c,c++,java,Php,swift等等,成为了一种通用的理想数据交换格式,它有两种数据结构,分别是对象,数组,它形式上有花括号{}和中括号[]嵌套,{}中的是代表对象,[]中的为数组,即对象中有数组,数组中又有对象,而且以及键/值对出现

JSON语法:
 json是javascript对象表示语法的子集

  • 数据在键值对中
  • 数据有逗号分隔
  • 花括号保存对象

JSON的值:

  • 数字(整数或浮点数)
  • 字符串(在双引号中
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

json和xml比较:

  • 数据体积小,耗费流量比xml少;
  • 可读性比xml稍差,但格式化后也很直观;
  • 与JavaScript交互比Xml方便;
  • 速度比xml快;
  • 拥有和xml同样多的解析方式。

更多信息参考:json官网,json百科

大概了解了JSON,下面将介绍在Android中解析json这三种常用的方式解析json。


本篇博客使用的json文件如下:(这里是获取网络JSON)people.json,别忘了添加
<uses-permission android:name="android.permission.INTERNET"/>

{
    "sid": "1683",
    "note": "想成就大事,就要从小事开始。",
    "tags": [
        {
            "id": "13",
            "name": "名人名言"
        },
        {
            "id": "16",
            "name": "治愈系"
        }
    ]
}
第一种JSONArray JSONObject:
代码如下:
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void parseJson(View view){
      new MyTask().execute();
    }
    class MyTask extends AsyncTask{
        @Override
        protected Object doInBackground(Object[] params) {
            //获取网络Json
            try {
                URL url=new URL("http://192.168.1.110:8080/study.json");
                HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                //设置请求方式
                connection.setRequestMethod("GET");
                //设置连接超时的时间(优化)
                connection.setConnectTimeout(5000);
                //获取结果码
                int code=connection.getResponseCode();
                if(code==200){
                    //获取服务器返回来的结果
                    InputStream is=connection.getInputStream();
                    BufferedReader br=new BufferedReader(new InputStreamReader(is));
                    String str=null;
                    StringBuffer stringBuffer=new StringBuffer();
                    while ((str=br.readLine())!=null){
                        stringBuffer.append(str);
                    }
                    Log.i("test",stringBuffer.toString());
                    JSONObject jsonObject=new JSONObject(stringBuffer.toString());
                    int sid=jsonObject.getInt("sid");
                    String note= jsonObject.getString("note");
                    Log.i("test","sid:"+sid+"   note:"+note);
                   JSONArray jsonArray= jsonObject.getJSONArray("tags");
                    for(int i =0;i <jsonArray.length();i++){
                        JSONObject jsonObject1=jsonArray.getJSONObject(i);
                       int id=jsonObject1.getInt("id");
                       String name= jsonObject1.getString("name");
                        Log.i("test","id:"+id+"    name:"+name);
                    }
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);
        }
    }
}
解析结果:

第二种:GSON解析
添加jar包
点击项目右击打开open Module Settings添加依赖


添加完jar包后,编写实体类:
StudyOne.java
package com.pxd.parsejson;
import java.util.List;
/**
 * Created by Administrator on 2017/2/16.
 */

public class StudyOne {
    private int sid;
    private  String note;
    private List<StudyTwo> tags;
    public StudyOne() {
    }
    public StudyOne(int sid, List<StudyTwo> tags, String note) {
        this.sid = sid;
        this.tags = tags;
        this.note = note;
    }
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
    public List<StudyTwo> getTags() {
        return tags;
    }
    public void setTags(List<StudyTwo> tags) {
        this.tags = tags;
    }
}

StudyTwo.java
package com.pxd.parsejson;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Created by Administrator on 2017/2/16.
 */
public class StudyTwo implements Parcelable{
    private  int id;
    private  String name;
    public StudyTwo() {
    }
    public StudyTwo(String name, int id) {
        this.name = name;
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public int describeContents() {
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(id);
        dest.writeString(name);
    }
    public static final Creator<StudyTwo> CREATOR = new Creator<StudyTwo>() {
        @Override
        public StudyTwo createFromParcel(Parcel in) {
            StudyTwo studyTwo =new StudyTwo();
            studyTwo.setId(in.readInt());
            studyTwo.setName(in.readString());
            return studyTwo;
        }
        @Override
        public StudyTwo[] newArray(int size) {
            return new StudyTwo[size];
        }
    };

    @Override
    public String toString() {
        return "StudyTwo{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

 JavaBean的编写(重点):

  • 其中属性名称和json数据的键名必须相同
  • 内部类不必是static(亲测)
  • 类属性可以是其他权限修饰符,包括private,并且可以不用写setter和getter(亲测)
代码如下只需把第一种解析方法的代码换成如下代码即可
 // 新建Gson对象
      Gson gson=new Gson();
      StudyOne studyOne=gson.fromJson(stringBuffer.toString(),StudyOne.class);
      Log.i("test","sid="+studyOne.getSid()+"  note="+studyOne.getNote());
      List<StudyTwo> studyTwoList =studyOne.getTags();
      for(StudyTwo studyTwo : studyTwoList){
         Log.i("test", studyTwo.toString());
      }

解析结果如下:


第三种解析Fast-json
1.添加jar包到libs目录,点击jar包右击Add As Library


主要代码:
  //03FastJson
                   StudyOne studyOne= JSON.parseObject(stringBuffer.toString(),StudyOne.class);
                    Log.i("test","sid="+studyOne.getSid()+" note="+studyOne.getNote());
                    List<StudyTwo> studyOnes=studyOne.getTags();
                    for (StudyTwo studytwo:studyOnes){
                        Log.i("test",studytwo.toString());
                    }
解析结果:

到这,三种方法都成功解析json,是不是感觉json解析Soeasy呢,简单到不想解析吐舌头。

总结:无论是XML还是JSON,或者HTML的解析都很简单,我们只要知道解析的原理和技巧就能解析任何的XML,JSON数据了。



三种高效Android JSON解析技术,让你的数据传输畅通无阻! 这三种解析JSON的方案各有特点,我们可以根据具体需求和项目复杂程度权衡选择。而在我看来,Google Gson则是大多数应用的不二之选,它Strike了简洁和性能之间最好的平衡。讨论到这里,你是否也有自己的看法和经验?欢迎在评论区继续交流探讨,分享你在JSON解析这条路上的点点心得。 阅读详情

相关推荐

Android JSON 解析

在 Android 中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,用于客户端与服务器之间的数据传输。Android 提供了多种方式来处理 JSON 数据,本文章介绍了 Android JSON 解析以及 Gson 的使用,和其他第三方库的说明。

天逸的博客 2518

Android解析JSON数据

JSONObject是Android内置的JSON解析库,通过它可以将JSON字符串转换为Java对象或将Java对象转换为JSON字符串。GSON是Google开源的Java JSON解析库,支持将JSON字符串自动转换为Java对象,同时也支持将Java对象自动转换成JSON字符串。String jsonString = "{'name':'张三','age':25}";String jsonString = "{'name':'张三','age':25}";2)将JSON字符串转换为Java对象。

qq_41878758的博客 4875

安卓Json数据以及解析为javaBean

安卓解析Json类型数据什么是json使用JSONObject进行解析 什么是json JSON(JavaScript Object Notation,JS 对象简谱) 是一种轻量级的数据交换格式。 示例: [ { "id": "0", "name": "Bilibili", "url": "https://www.bilibili.com/", "version": "1.5" }, { "id": "1", "name": "Baidu",

qq_44356236的博客 3112

Android中解析json数据的三种方式

Json简介 JAVAScript Object Notation是一种轻量级的数据交换格式 具有良好的可读和便于快速编写的特性。 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持) JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org JSON作为数据是目前网络中主流的数据传输格式之一,应用十

探索者李小白的博客 8274

在银河麒麟V10上部署Atlas 300i Duo:从固件到驱动的一站式踩坑笔记

日期:2025-09-09关键词:鲲鹏920、Atlas 300i Duo、银河麒麟V10、NPU、驱动、固件。

weixin_41544125的博客 2815

CPU也能跑大模型?手把手教你用vLLM离线部署Qwen2.5-7B-Instruct(附性能优化技巧)

本文详细介绍了如何在CPU服务器上高效部署Qwen2.5-7B-Instruct模型,通过vLLM框架和一系列优化技巧实现离线推理。内容包括环境配置、模型加载优化、性能调优及生产环境部署方案,帮助开发者在资源有限的情况下也能运行大语言模型。

weixin_28691741的博客 494

安卓大json文件解析_Android之JSON格式数据解析

packagecom.rainsong.jsondemo;importjava.io.IOException;importjava.net.URLEncoder;importjava.util.ArrayList;importorg.apache.http.HttpResponse;importorg.apache.http.NameValuePair;importorg.apache.http....

weixin_35843812的博客 211

Protege新手必看:从安装到建模的完整指南(附推理功能详解)

本文为Protege新手提供从安装、配置到核心建模的完整实战指南。详细讲解了Java环境准备、本体项目创建、类与属性定义、个体填充等关键步骤,并重点解析了推理功能的配置与使用,帮助读者快速构建可逻辑推理的知识图谱,避开常见陷阱。

numpy6sculptor的博客 797

安卓大json文件解析_Android随手笔记44之JSON数据解析

本文将主要介绍在Android开发中,如何在服务器端创建JSON数据,以及如何在Android客户端对JSON数据进行解析,对android json解析 相关知识感兴趣的朋友一起学习吧JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式。本文将主要介绍在Android开发中,如何在服...

weixin_32520601的博客 185

AT32F403A ADC采集实战:如何用V2库精准读取可变电阻电压(附完整代码)

本文详细介绍了基于AT32F403A微控制器和V2库实现高精度ADC采集的工程化方法。内容涵盖从基础的单通道轮询配置到多通道扫描与DMA传输的进阶应用,并重点分享了提升ADC采集精度的关键技巧,包括采样时间优化、软件滤波算法以及硬件布局考量,提供了完整的实战代码,帮助开发者解决数据跳动、稳定性等常见问题。

weixin_29189003的博客 92

Vivado静态时序分析学习笔记(1)

静态时序分析分为片内时序分析(寄存器与寄存器之间的时序关系)和片外时序分析(IO时序分析)。(1)建立时间 setup time在时钟事件(上升沿/下降沿)发生之前数据信号应保持稳定的时间。把实际电路抽象成前级D触发器+组合逻辑+后级D触发器。

Fantaasky的博客 4377

安卓大json文件解析_如何在android中解析复杂的JSON文件

我需要解析这个json字符串{"results": {"result": [{"cover": "http://ia.media-imdb.com/images/M/MV5BMjMyOTM4MDMxNV5BMl5BanBnXkFtZTcwNjIyNzExOA@@._V1._SX54_CR0,0,54,74_.jpg","title": "The Amazing Spider-Man","year"...

weixin_39629876的博客 302

【Linux系统】Kdenlive软件多机位同音频视频同步化处理

Kdenlive简介 官网链接:https://kdenlive.org/zh/ 命令行安装: apt-get install kdenlive Kdenlive能够进行多轨道视频编辑,可以使用和调整多条音频、视频轨道。每条轨道可以按需进行单独锁定、静音。 Kdenlive多机位同音频视频同步化处理步骤 1. 新建Kdenlive文件 选择<文件>-<新建>,建立新的kdenlive文件,初始设置为<视频轨:2>,<音频轨:2>。 视.

qq_31550269的博客 1886

安卓大json文件解析_android针对json数据解析方法实例分析

本文实例讲述了android针对json数据解析方法。分享给大家供大家参考。具体如下:JSON的定义:一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.orgJSON Vs XM...

weixin_28701593的博客 455

电子电器架构刷写方案——General Flash Bootloader

### 文章大体有如下内容: ### 1、简介 ### 2、刷写系统概述 ### 3、Flash Bootloader刷写流程 ### 4、Flash Bootloader架构介绍 ### 5、关于刷写的思考

Soly_kun的博客 2211

企业财务共享服务中心业务蓝图规划方案【附全文阅读】

《企业财务共享服务中心业务蓝图规划方案》为集团企业提供财务共享中心建设全流程指导,涵盖战略定位、组织架构、业务流程、信息系统、运营管理和变革实施六大维度。方案明确共享中心"交易处理+战略支撑"双重职能,设计专业分组架构,筛选标准化高、价值明确的流程(如核算、资金结算等)纳入共享范围,构建业财一体化平台,并配套绩效与风险管控体系。结合项目型企业管理特点,分阶段推进实施,助力企业实现财务集中化与标准化转型。

cdfunlove的博客 994

安卓解析php json,Android_android解析JSON数据,JSONObject的使用  一、 JSON - phpStudy

android解析JSON数据JSONObject的使用一、 JSON对象的使用:String content = "{'username': 'linux', 'password': '123456'}";JSONObject jsonObject = new JSONObject(content);String username = jsonObject.getString("username...

weixin_32552195的博客 193

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【小王的安卓之路】Android解析JSON数据

Android解析JSON数据 一.什么是JSON 二.怎么解析JSON 一.什么是JSON: 1.1JSON的定义: JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想...

小王的学习blog 241

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android安卓——json数据解析

一、什么是json json(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服 务器的数据交换格式往往通过json来进行交换。尤其是对于web开发来说,json数据格式在客户端直接可以通过javascript来进行解析。 json一共有两种数据结构,一种...

256

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

安卓大json文件解析_Android系列---JSON数据解析

一、什么是jsonjson(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比较的复杂,而且需要编写大段的代码,所以客户端和服务器的数据交换格式往往通过json来进行交换。尤其是对于web开发来说,json数据格式在客户端直接可以通过javascript来进行解析。json一共有两种数据结构,一种是以 (key/va...

weixin_39975486的博客 425

安卓大json文件解析_Android - JSON数据的封装和解析

听着谢春花的《茶花伴》。--其中的雨生哀 镜尘满 韶颜虽易改。弃脂彩 肠何断 拂手去青苔。写出是一个带着酒气和茶味少女在朦朦小雨☔️下,独自弹着????漫步在陡缓的山路中,似乎好像长期等待⌛️心目中另一半人。然而在旁边的小溪照着水镜,看着美好的年华渐渐流失而感到美好的环境只是又一春天来,内心又一次衷心诉了春过半 平生光影短。让我们在惜别和怀念的时候但愿有茶花伴吧!相信android从事着多json格式的...

weixin_39600616的博客 270

Android 安卓原生Json解析并展示listview

MainActivity import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.Lis

無趣的博客 1026

安卓大json文件解析,Android-从资产解析巨大(特大)JSON文件的最佳方法

I'm trying to parse some huge JSON file from assets folder. How can i load and add to RecyclerView. would like to know what is the best approch to parse this kind of big file (about 6MB) and if you ma...

weixin_31421601的博客 267

安卓开发工程师-数据解析(JSON、XML)

在解析 JSON 或 XML 数据时,可能会出现各种异常,如格式错误、数据缺失、类型不匹配等。为了保证程序的健壮性,需要对这些异常进行合理的处理。在解析 JSON 或 XML 数据时,可以将解析后的数据缓存起来,以便下次使用时可以直接从缓存中获取,而无需重新解析。在 Android 中,可以使用 DOM(Document Object Model)解析器来解析 XML 数据。动态解析是指在不知道 JSON 或 XML 数据的具体结构的情况下,能够灵活地解析和处理数据。包来解析 JSON 数据。

qq_62784677的博客 1049

安卓大json文件解析_Android-从资产解析巨大(特大)JSON文件的最佳方法

I'm trying to parse some huge JSON file from assets folder. How can i load and add to RecyclerView. would like to know what is the best approch to parse this kind of big file (about 6MB) and if you ma...

weixin_39644611的博客 593
上一篇: Android解析XML的三种方式
下一篇: Maven新建webapp项目index.jsp报错
d_shadow
博客等级 码龄10年 42粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值