1.java实现json的读取
①json就时类似一个文本,用{}括起来,多组key和value键值对,key值必须是String类型,value可以是任意类型
{
"name" : "zhangsan",
"age" : 25,
"like" : ["a",2,"c"],
"other" : {"A" : "1","B" : "2"}
}
②读取时先按io操作,读取字符串str,然后转换成JSONObject和JSONArray类型即可
JSONObject demo=new JSONObject(str); #文件以{开始,也就是一个JSONObject对象
JSONArray demo=new JSONArray(str); #文件以[开始,有多个JSONObject对象
③源码(针对value的不同类型,列表和字典最为特殊,分别用getJSONArray和getJSONObject来实现)
package com;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class test1 {
public static void main(String[] args) throws JSONException {
String str = "";
try{
String Path="C:\\Users\\HQH\\Desktop\\hh.json";
FileInputStream fileInputStream = new FileInputStream(Path);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
BufferedReader reader = new BufferedReader(inputStreamReader);
String tempString = null;
while((tempString = reader.readLine()) != null){
str += tempString;
}
System.out.println(str);
JSONObject demo=new JSONObject(str);
System.out.println("长度="+demo.length());
System.out.println("name="+demo.get("name"));
System.out.println("age="+demo.get("age"));
JSONArray o=demo.getJSONArray("like");
System.out.println("like长度="+o.length()); //下标遍历
System.out.println("like第一位="+o.get(0));
System.out.println("like第二位="+o.get(1));
System.out.println("like第三位="+o.get(2));
JSONObject oo=demo.getJSONObject("other");
System.out.println("other长度="+oo.length());
System.out.println("other获取键值A的value="+oo.get("A")); //类似嵌套
System.out.println("other获取键值B的value="+oo.get("B"));
}catch(IOException e){
e.printStackTrace();
}
}
}
运行结果:
长度=4
name=zhangsan
age=25
like长度=3
like第一位=a
like第二位=2
like第三位=c
other长度=2
other获取键值A的value=1
other获取键值B的value=2
2、json的写入
one:利用json对象,添加(写入的时候,先toString转换成字符串,然后按照IO操作即可)
two:利用map对象,添加
three:针对特殊value类型,添加
package com;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class test2 {
public static void main(String[] args) throws Exception {
JSONObject person = new JSONObject();
try {
person.put("name","hqh");
person.put("age",24);
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println(person);
one();
two();
three();
}
private static void one() throws Exception {
HashMap<String,Object> person=new HashMap<String,Object>();
person.put("name","hqf");
person.put("age",26);
String s=new JSONObject(person).toString();
String Path="C:\\Users\\HQH\\Desktop\\hhh.json";
FileOutputStream fos= new FileOutputStream(Path);
OutputStreamWriter os= new OutputStreamWriter(fos);
BufferedWriter w= new BufferedWriter(os);
w.write(s);
w.close();
System.out.println(s);
}
private static void two() {
HashMap<String,Object> person=new HashMap<String,Object>();
ArrayList<Object> list=new ArrayList<Object>();
list.add("abc");
list.add(123);
person.put("name",list);
HashMap<String,Object> temp=new HashMap<String,Object>();
temp.put("cde",456);
person.put("age",temp);
System.out.println(new JSONObject(person).toString());
}
private static void three() {
HashMap<String,Object> person=new HashMap<String,Object>();
person.put("name","123");
HashMap<String,Object> person1=new HashMap<String,Object>();
person1.put("name",456);
JSONArray a=new JSONArray();
a.put(person);
a.put(person1);
System.out.println(a.toString());
}
}
输入结果:
{"name":"hqh","age":24}
{"name":"hqf","age":26}
{"name":["abc",123],"age":{"cde":456}}
[{"name":"123"},{"name":456}]