第 19 章 JSON (JavaScript Object Notation)

简介:

19.1. javax.json.*

19.1.1. Json 编码

				package netkiller.json;

				import java.io.File;
				import java.io.FileOutputStream;
				import java.io.IOException;
				import java.io.OutputStream;

				import javax.json.*;

				public final class Writer {

				public static void main(String[] args) {
				// TODO Auto-generated method stub

				JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();
				JsonObjectBuilder addressBuilder = Json.createObjectBuilder();
				JsonArrayBuilder phoneNumBuilder = Json.createArrayBuilder();

				phoneNumBuilder.add("12355566688").add("0755-2222-3333");

				addressBuilder.add("street", "Longhua").add("city",
				"Shenzhen").add("zipcode", 518000);

				jsonBuilder.add("nickname", "netkiller").add("name", "Neo").add("department", "IT").add("role",
				"Admin");

				jsonBuilder.add("phone", phoneNumBuilder);
				jsonBuilder.add("address", addressBuilder);

				JsonObject jsonObject = jsonBuilder.build();

				System.out.println(jsonObject);

				try {
				// write to file
				File file = new File("json.txt");
				if (!file.exists()) {
				file.createNewFile();
				}
				OutputStream os = null;
				os = new FileOutputStream(file);
				JsonWriter jsonWriter = Json.createWriter(os);
				jsonWriter.writeObject(jsonObject);
				jsonWriter.close();
				} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				}

				}

				}
			

运行后输出

				{"nickname":"netkiller","name":"Neo","department":"IT","role":"Admin","phone":["12355566688","0755-2222-3333"],"address":{"street":"Longhua","city":"Shenzhen","zipcode":"518000"}}
			

19.1.2. Json 解码

				package netkiller.json;

				import java.io.FileInputStream;
				import java.io.IOException;
				import java.io.InputStream;

				import javax.json.Json;
				import javax.json.JsonArray;
				import javax.json.JsonObject;
				import javax.json.JsonReader;
				import javax.json.JsonValue;

				public final class Reader {

				public static final String JSON_FILE="json.txt";

				public static void main(String[] args) throws IOException {
				InputStream fis = new FileInputStream(JSON_FILE);
				//create JsonReader object
				JsonReader jsonReader = Json.createReader(fis);

				//get JsonObject from JsonReader
				JsonObject jsonObject = jsonReader.readObject();

				//we can close IO resource and JsonReader now
				jsonReader.close();
				fis.close();

				System.out.printf("nickname: %s \n", jsonObject.getString("nickname"));
				System.out.printf("name: %s \n", jsonObject.getString("name"));
				System.out.printf("department: %s \n",
				jsonObject.getString("department"));
				System.out.printf("role: %s \n", jsonObject.getString("role"));
				JsonArray jsonArray = jsonObject.getJsonArray("phone");

				//long[] numbers = new long[jsonArray.size()];
				int index = 0;
				for(JsonValue value : jsonArray){
				//numbers[index++] = Long.parseLong(value.toString());
				System.out.printf("phone[%d]: %s \n", index++, value.toString());
				}

				//reading inner object from json object
				JsonObject innerJsonObject = jsonObject.getJsonObject("address");

				System.out.printf("address: %s, %s, %d \n",
				innerJsonObject.getString("street"),
				innerJsonObject.getString("city"),
				innerJsonObject.getInt("zipcode"));

				}

				}
			

运行结果

				nickname: netkiller
				name: Neo
				department: IT
				role: Admin
				phone[0]: +8612355566688
				phone[1]: 0755-2222-3333
				address: Longhua, Shenzhen, 518000
			

19.1.3. URL获取Json

		
package netkiller.json;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;

import javax.json.*;

public class HttpUrl {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String URL = "http://www.example.com/json/2/20/0.html";
		// system.out.println("Requeted URL:" + URL);
		StringBuilder sb = new StringBuilder();
		URLConnection urlConn = null;
		InputStreamReader in = null;
		try {
			URL url = new URL(URL);
			urlConn = url.openConnection();
			if (urlConn != null)
				urlConn.setReadTimeout(60 * 1000);
			if (urlConn != null && urlConn.getInputStream() != null) {
				in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset());
				BufferedReader bufferedReader = new BufferedReader(in);
				if (bufferedReader != null) {
					int cp;
					while ((cp = bufferedReader.read()) != -1) {
						sb.append((char) cp);
					}
					bufferedReader.close();
				}
			}
			in.close();

			String jsonString = sb.toString();

			//System.out.println(jsonString);

			JsonReader reader = Json.createReader(new StringReader(jsonString));

			JsonObject jsonObject = reader.readObject();

			reader.close();

			// System.out.println(jsonObject.size());

			for (int i = 0; i < jsonObject.size() - 2; i++) {
				JsonObject rowObject = jsonObject.getJsonObject(Integer.toString(i));
				// System.out.println(rowObject.toString());
				System.out.printf("%s\t%s\t%s\n", rowObject.getJsonString("id"), rowObject.getJsonString("title"),
						rowObject.getJsonString("ctime"));
			}

		} catch (Exception e) {
			throw new RuntimeException("Exception while calling URL:" + URL, e);
		}

	}

}
		




原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

目录
相关文章
|
1月前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
4月前
|
XML JSON JavaScript
|
4月前
|
JSON JavaScript 前端开发
JavaScript 如何对 JSON 数据进行冒泡排序?
JavaScript 如何对 JSON 数据进行冒泡排序?
52 0
|
29天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`&#39;1.2,2,3,4,5&#39;`)转换为对象数组。通过使用`split(&#39;,&#39;)`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
1月前
|
JavaScript 前端开发
JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
JavaScript中Object.prototype.toString.call()、instanceOf和Array.isArray()的区别
26 1
|
2月前
|
存储 JavaScript
JS中Map对象与object的区别
JS中Map对象与object的区别
|
2月前
|
JavaScript
JS之Object.defineProperty方法
JS之Object.defineProperty方法
|
2月前
|
JavaScript 前端开发 Java
编程笔记 html5&css&js 073 JavaScript Object数据类型
编程笔记 html5&css&js 073 JavaScript Object数据类型
|
3月前
|
JSON JavaScript 前端开发
Python之JavaScript逆向系列——接口JSON信息获取与操作
Python之JavaScript逆向系列——接口JSON信息获取与操作
56 0
|
3月前
|
JavaScript 前端开发
Object.assign() - JavaScript
Object.assign() - JavaScript