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

【Agent】多智能体框架MetaGPT入门教程

创建一个 Action 类的子类 SimpleWriteCode,子类中定义好 prompt,并解析返回结果。在 MetaGPT 中,

酒酿小圆子呀~ 3139

全志 mipi屏幕和触摸驱动调试记录

mipi屏幕与触摸调试记录

u011996684的博客 3220

安卓大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

STM32CubeMX和华为LiteOS Studio开发STM32

传统的STM32的开发通常使用Keil/IAR这类开发软件,随着物联网时代的到来,传统嵌入式的发展不断向物联网方向靠拢,而Keil/IAR这类开发软件无法满足IoT一站式的开发,华为LiteOS Studio结合STM32CubeMX可以快速,高效地进行物联网开发,本文提供一种开发思路及环境的配置方法。...

weixin_45680600的博客 2833

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

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

weixin_32520601的博客 185

峰岹FU6832L双核电机控制芯片实战:从FOC算法到BLDC/PMSM驱动开发

在嵌入式系统和电机控制领域,磁场定向控制(FOC)是实现无刷直流电机(BLDC)和永磁同步电机(PMSM)高效、平稳运行的核心算法。其原理是通过坐标变换将三相交流量分解为直流量,实现类似直流电机的转矩与磁场解耦控制,从而提升效率、降低噪音与振动。这项技术的工程价值在于能以更低的处理器开销实现高性能驱动,广泛应用于消费电子、工业自动化与智能家电。本文以峰岹FU6832L芯片为例,深入解析其独特的双核架构——将实时性要求极高的FOC运算交由专用硬件引擎处理,解放主控CPU处理应用逻辑,并结合PID参数整定、电流

weixin_29570795的博客 514

XMC1402调试实战:如何用20元的Jlink-OB搞定SWD连接(附DAVE 4.4.2配置)

本文详细介绍了如何使用成本仅20元的Jlink-OB调试器,成功连接并调试英飞凌XMC1402芯片的完整实战流程。内容涵盖从理解芯片启动模式、使用Memtool完成首次烧录与模式切换,到Jlink-OB驱动安装、连接验证,以及在DAVE 4.4.2中配置调试环境并解决常见问题的全步骤,为个人开发者提供了一套高性价比的SWD调试解决方案。

zz67890的博客 554

安卓大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

【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)

本文针对传统A算法在机器人路径规划中存在的搜索效率低、路径不平滑等问题,提出了一种改进型A算法。该算法通过引入跳点搜索(JPS)技术优化子节点扩展方式,结合贝塞尔曲线或B样条曲线进行路径平滑处理,并采用动态启发式函数和自适应邻域搜索策略,显著提升了路径规划的效率和路径质量。实验结果表明,改进型A*算法在复杂环境下能有效减少搜索节点数量,缩短路径长度,提高路径平滑性,且具备动态避障能力。

2501_92867626的博客 1583

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

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

weixin_28701593的博客 455

MATLAB基础应用精讲-【数模应用】信用评分模型(附R语言和python代码实现)

信用评分模型是近年来兴起的一种为了保障银行和其他金融部门的金融安全而设立的一种关于人身金融权限的划定模型。该模型指根据客户的信用历史资料,利用一定的信用评分模型,得到不同等级的信用分数,根据客户的信用分数,来决定客户所可以持有的金额权限,从而保证还款等业务的安全性。而随着在现代社会和公司中,贷款,信用卡的作用日渐突出,信用评分模型的发展前景不可估量。信贷风险是指借款人因偿还贷款或履行合同承诺而破产而产生损失的可能性。传统上,它与贷款人无法偿还所欠利息和本金、影响现金流和增加装配成本所产生的风险有关。

qq_36130719的博客 364

KEPServerEX物联网网关(IoT Gateway)REST客户端代理(非原创)

(中文版)资料来源于【OPC-KEPServerEX学习KEPWare交流】905485143群的【455196383】【零下一度】 一。KEPServerEX物联网网关REST客户端代理演示 在KSE中,首先构建一个带有通道/设备/标签的模拟器系统。 例如,下面是三个随机项目。 直接到IoT网关插件,添加新代理。 从类型列表中选择REST Client。 终结点...

-雲飛兄-博客 5808

安卓解析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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

小王的学习blog 241

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android安卓——json数据解析

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

256

安卓大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、付费专栏及课程。

余额充值