Android手动创建和解析Json

概述

现在Android开发中创建和解析Json大都是利用Gson、fastJson等可以映射对象的第三方库,确实非常方便,使用Gson解析可以参考我的另一篇文章使用Gson解析和创建json, 但是还是有需要手动解析的情况。本文详细介绍了不使用第三方库,直接使用Android自带的JsonObject等类来创建和解析json,并准备了一个小Demo.

1 json的格式介绍

1.1 json对象

{"name": "jadyli", "gender": "male"}

1

对象表示为键值对,数据由逗号分隔,花括号保存对象,使用双引号包裹键名,使用冒号分隔键和值。如果值是String类型且含有双引号或冒号,需要使用”\”转义。

1.2 json数组

[

{"name": "jadyli", "gender": "male"},

{"name": "sanqi", "gender": "male"}

]

方括号保存数组。

2 Android自带的Json操作类

2.1 JSONObject

2.1.1 JSONObject基本介绍

Android官方的介绍是

A modifiable set of name/value mappings. Names are unique, non-null strings. Values may be any mix of JSONObjects, JSONArrays, Strings, Booleans, Integers, Longs, Doubles or NULL. Values may not be null, NaNs, infinities, or of any type not listed here.

一个可变更的键值对映射集合。键是唯一的,非空的字符串。值可能是JSONObjects,JSONArrays,Strings,Booleans,Integers,Longs,Double或NULL中的任意组合。值也有可能不是null,NaNs,infinities,或者任意的这里没有列举的类型。

一些常用的方法如下,参考Android JSONObject类

方法名(参数) 描述

get(String name) 返回跟键映射的值,如果没找到则抛出异常

getInt(String name) 返回int值,如果没找到则抛出异常

getString(String name) 返回String值,如果没找到则抛出异常

opt(String name) 返回跟键映射的值,如果没找到则返回null

optString(String name, String fallback) 返回跟键映射的值,如果没找到则返回方法参数中fallback

optString(String name) 返回跟键映射的值,如果没找到则返回空字符串”“

put(String name, Object value) 将键映射到值,如果这个对象中存在这个键则会覆盖之前的

put(String name, int value) 将键映射到值,如果这个对象中存在这个键则会覆盖之前的

getJSONObject(String name) 返回JSONObject,如果没找到则抛出异常

getJSONArray(String name) 返回JSONArray值,如果没找到则抛出异常

keys() 返回Iterator,这个对象中键的集合迭代器

names() 返回JSONArray,这个对象中键的数组

length() 返回这个对象中数据条数

has(String name) 判断这个对象中是否有这个键的映射

isNull(String name) 判断这个对象中是否有这个键的映射,或者判断值为NULL

toString() 将这个对象转成json串,比如:{“query”:”Pizza”,”locations”:[94043,90210]}

toString(int indentSpaces) 将这个对象转成json串,显示上会增加换行和缩进,方便阅读

可以调用JSONObject()构造方法,创建一个空的JSONObject,也可以调用JSONObject(String json),将json字符串传入。

2.1.2 JSONObject实例

运用上面的方法,已经可以解析和创建一般的json字符串了。以这个json字符串为例。

{"name": "jadyli", "gender": "male", "age": 18}

1

创建json

JSONObject jsonObject = new JSONObject();jsonObject.put("name", "jadyli");jsonObject.put("gender", "male");jsonObject.put("age", 18);System.out.println(jsonObject.toString(1));

输出

{“name”:”jadyli”,”gender”:”male”,”age”:18}

解析json

String json = "{\"name\": \"jadyli\", \"gender\": \"male\", \"age\": 18}";JSONObject jsonObject = new JSONObject(json);System.out.println("姓名:" + jsonObject.getString("name"));System.out.println("性别:" + jsonObject.getString("gender"));System.out.println("年龄:" + jsonObject.getString("age"));

2.2 JSONArray

参考JSONArray

JSONArray的方法和JSONObject基本一致。举个JSONObject和JSONArray同时使用的小例子。

{"students": [{"name": "jadyli","gender": "male","age": 18},{"name": "Juliet","gender": "female","age": 20}]}

创建json

String[] names = {"jadyli", "Juliet"};String[] genders = {"male", "female"};int[] ages = {18, 20};JSONArray students = new JSONArray();for (int i = 0; i < names.length; i++) {JSONObject student = new JSONObject();student.put("name", names[i]);student.put("gender", genders[i]);student.put("age", ages[i]);students.put(student);}JSONObject jsonObject = new JSONObject();jsonObject.put("students", students);System.out.println(jsonObject.toString(1));

输出

{“students”:[{“name”:”jadyli”,”gender”:”male”,”age”:18},{“name”:”Juliet”,”gender”:”female”,”age”:20}]}

解析json

String json = "{"students":[{"name":"jadyli","gender":"male","age":18},{"name":"Juliet","gender":"female","age":20}]}";JSONObject jsonObject = new JSONObject(json);JSONArray students = jsonObject.getJSONArray("students");for (int i = 0; i < students.length(); i++) {JSONObject student = students.getJSONObject(i);System.out.println("姓名:" + student.getString("name"));System.out.println("性别:" + student.getString("gender"));System.out.println("年龄:" + student.getInt("age") + "\n");}

Android手动创建和解析Json相关推荐

  1. android json 教程 pdf,android用jsonReader来解析json,jsonreaderjson

    android用jsonReader来解析json,jsonreaderjson 对于这个json: { "id" : "3232", "data&q ...

  2. android怎么根据标题解析json,如何在android中解析没有json对象标题的json数组?

    首先,我创建了解析器类JSONParser.java package com.example.myparse; import java.io.BufferedReader; import java.i ...

  3. cjson 对象是json数组型结构体_cJSON创建并解析json结构体 | 学步园

    cJSON 对于cJSON的使用,我主要是用来模拟远程服务器端返回的一个json类型的目录结构,客户端进行获取并进行解析,把解析出来的目录按照原本的结构显示在本地. cJSON简介 cJSON是一个超 ...

  4. android手动创建数据表,Android开发—数据库应用—手动创建(SQLite)数据库--手动创建数据表(table)...

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:数据库应用-手 ...

  5. C/C++程序开发: cJSON的使用(创建与解析JSON数据)

    一.cJSON介绍 cJSON 是一个超轻巧,携带方便,单文件,可以作为 ANSI-C 标准的 JSON 解析器,是一个用C语言编写的简单好用的JSON解析器:它只包含一个C文件和一个头文件,可以非常 ...

  6. android开发之 Gson 解析json数组

    为了纪念两天解决的一个问题. 刚刚接触到android的volley 框架,使用jsonarrayrequest的时候,得到jsonarray 问高手说可以用Gson 来解析于是开始了两天的钻研之路. ...

  7. unity创建与解析json

    今天翻看了一下之前的博客,发现写了好几篇关于加载json的文章,今天正好有时间就把之前的几篇文章的内容总结一下,然后在添加一些新内容. 在unity里边可以用的加载json的插件有:JsonUtili ...

  8. Android利用Gson解析Json数据

    其实,要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个 ...

  9. java json解析jar包,解析json常用jar包

    13.轻量级的 JSON API:内置了一个轻量级的 JSON API 14.响... 1.加入 Jackson.jar? 2.在配置文件中配置 json 的映射? 3... 和json都是一种数据交 ...

最新文章

  1. 2021 年第十一届 MathorCup 高校数学建模挑战赛A题分析
  2. CTF-Misc--处理压缩包大量文件将其转为二进制->10进制->字符串 脚本
  3. php mysql 安装错误_Apache+php配置 Mysql安装出错解决办法
  4. YbtOJ#20236-[冲刺NOIP2020模拟赛Day9]红点蓝点【线段树,堆】
  5. mysql 8.0 一条insert语句的具体执行流程分析(三)
  6. 算法导论2nd 10.1-7
  7. 胡润富豪榜2020出炉,雷军身价是任正非的十倍?
  8. Bailian4107 19岁生日礼物-Birthday Gift【进制】
  9. javascript 的预解释机制
  10. DNS在什么情况下才能动态更新|活动目录集成的dns区域
  11. sqlplus 命令导入数据文件
  12. 使用 IDEA Maven 整合 SSM 框架(Spring+SpringMVC+Mybatis)
  13. 【LaTex 中英文样式加粗】自由选择中英文字体样式,中英文字体粗黑程度设置
  14. andorid 访问不到smms图片
  15. Android移动开发——全方面分析 Hilt 和 Koin 性能
  16. 大数据深度学习学习路线
  17. 免费可商用的图片资源推荐
  18. 物联网应用-分布式对象储存工具-MinIO 对象存储win部署及使用
  19. 最新使用Mac自带的启动转换助理(Boot Camp)安装Windows10的详细方法教程-macbookpro 10.13.4
  20. Roguelike 游戏中的计算哲学

热门文章

  1. java 线程安全问题之静态变量、实例变量、局部变量
  2. asp.net core刷新css缓存
  3. easyUI之ComboBox(下拉列表框)
  4. linux命令--ldconfig和ldd用法
  5. 顺序查找、折半查找及索引顺序查找
  6. 感觉自己应该重新读一次Javascript
  7. SIGTERM等信号含义
  8. 走出海量数据及访问量压力困境
  9. 企业实战|企业FTP搭建
  10. ELK+logstash配置日志报警