使用JSONObject生成和解析json的方法
1. json数据类型
类型
描述
number
数字型
string
字符串型
boolean
布尔型
array
数组
object
对象
null
空值
(1)json中不区分整数、小数等类型,而统一使用number来存储数字。
(2)array表示数组,以中括号"[]"括起来,元素之间以逗号分隔,元素可以为任意类型。
(3)object表示对象,类似于c语言中的结构体,以花括号"{}"括起来,其元素要求为键值对,key必须为string类型的,而value则可为任意类型。key和value之间以":"表示映射关系,元素之间也是以逗号分隔。
(4)string、boolean、null与java中一样,这里不再赘述。
2. 构建json
使用jsonobject需要引用org.json包,推荐通过maven引用,
温馨提示:我在构建maven项目的时候屡屡创建失败,在网上查了很久还是搞不定,后来*就搞定了,如果你也创建失败,可以尝试一下。
2.1 直接构建
jsonobject obj = new jsonobject(); obj.put(key, value);
直接构建即直接实例化一个jsonobject对象,而后调用其put()方法,将数据写入。put()方法的第一个参数为key值,必须为string类型,第二个参数为value,可以为boolean、double、int、long、object、map以及collection等。当然,double以及int等类型只是在java中,写入到json中时,统一都会以number类型存储。
范例:
import org.json.jsonobject; public class jsonobjectsample { public static void main(string[] args) { createjson(); } private static void createjson() { jsonobject obj = new jsonobject(); obj.put("name", "john"); obj.put("sex", "male"); obj.put("age", 22); obj.put("is_student", true); obj.put("hobbies", new string[] {"hiking", "swimming"}); //调用tostring()方法可直接将其内容打印出来 system.out.println(obj.tostring()); } }
输出结果为:
{"hobbies":["hiking","swimming"],"sex":"male","name":"john","is_student":true,"age":22}
这里可以看到,为了压缩大小以便于更高效地传输,json把所有空格、换行符等空白符全部去掉了。如果想要直观点看其内容,可以用一些在线的json解析器看,例如:http://www.jsoneditoronline.org/
2.2 使用hashmap构建
使用hashmap构建json,实际上即先创建好一个hashmap对象并且将数据打包进去,而后在创建jsonobject时将其作为一个参数传进去。
范例:
public class jsonobjectsample { public static void main(string[] args) { createjsonbymap(); } private static void createjsonbymap() { map<string, object> data = new hashmap<string, object>(); data.put("name", "john"); data.put("sex", "male"); data.put("age", 22); data.put("is_student", true); data.put("hobbies", new string[] {"hiking", "swimming"}); jsonobject obj = new jsonobject(data); system.out.println(obj.tostring()); } }
2.3 使用javabean构建
相较于前两种方法,实际开发中应用javabean构建json的情况更为常见,因为这样代码的重用率更高。
范例:
javabean:
public class personinfo { private string name; private string sex; private int age; private boolean isstudent; private string[] hobbies; public void setname(string name) { this.name = name; } public void setsex(string sex) { this.sex = sex; } public void setage(int age) { this.age = age; } public void setstudent(boolean isstudent) { this.isstudent = isstudent; } public void sethobbies(string[] hobbies) { this.hobbies = hobbies; } //getter不能少 public string getname() { return name; } public string getsex() { return sex; } public int getage() { return age; } public boolean isstudent() { return isstudent; } public string[] gethobbies() { return hobbies; } }
main:
import org.json.jsonobject; public class jsonobjectsample { public static void main(string[] args) { createjsonbyjavabean(); } private static void createjsonbyjavabean() { personinfo info = new personinfo(); info.setname("john"); info.setsex("male"); info.setage(22); info.setstudent(true); info.sethobbies(new string[] {"hiking", "swimming"}); jsonobject obj = new jsonobject(info); system.out.println(obj); } }
需要注意一点,javabean一定要有getter方法,否则会无法访问存储的数据。
3. 解析json
解析json主要是基本类型如number、boolean等,与数组array。
基本类型的解析直接调用jsonobject对象的getxxx(key)方法,如果获取字符串则getstring(key),布尔值则getboolean(key),以此类推。
数组的解析稍微麻烦一点,需要通过jsonobject对象的getjsonarray(key)方法获取到一个jsonarray对象,再调用jsonarray对象的get(i)方法获取数组元素,i为索引值。
范例:
首先在工程目录"src/main/java"下创建一个json文件,用于解析。
demo.json:
{ "hobbies": [ "hiking", "swimming" ], "sex": "male", "name": "john", "is_student": true, "age": 22 }
在pom.xml中加入对commons-io的依赖,以便于使用fileutils进行文件访问:
<project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.studying</groupid> <artifactid>myjson</artifactid> <version>0.0.1-snapshot</version> <packaging>jar</packaging> <name>myjson</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> </properties> <dependencies> <dependency> <groupid>org.json</groupid> <artifactid>json</artifactid> <version>20160810</version> </dependency> <!--加入对commons-io的依赖--> <dependency> <groupid>commons-io</groupid> <artifactid>commons-io</artifactid> <version>2.4</version> </dependency> </dependencies> </project>
主类:
import java.io.file; import java.io.ioexception; import org.apache.commons.io.fileutils; import org.json.jsonarray; import org.json.jsonobject; public class jsonobjectsample { public static void main(string[] args) throws ioexception { file file = new file("src/main/java/demo.json"); string content = fileutils.readfiletostring(file); //对基本类型的解析 jsonobject obj = new jsonobject(content); system.out.println("name:" + obj.getstring("name")); system.out.println("sex:" + obj.getstring("sex")); system.out.println("age" + obj.getint("age")); system.out.println("is_student" + obj.getboolean("is_student")); //对数组的解析 jsonarray hobbies = obj.getjsonarray("hobbies"); system.out.println("hobbies:"); for (int i = 0; i < hobbies.length(); i++) { string s = (string) hobbies.get(i); system.out.println(s); } } }
以上这篇使用jsonobject生成和解析json的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。