java实现json的读写

1.java实现json的读取

jar包下载

①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}]
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值