第 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 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

时间: 2024-07-31 06:59:19

第 19 章 JSON (JavaScript Object Notation)的相关文章

Ajax中数据传递的另一种模式 javascript Object Notation思想(JSON)_AJAX相关

Ajax是"异步javascript和XML"的缩写已经众所周知,然而虽然XML是看上去的重要组成部分,它却不是必须的.一位资深的软件工程师Douglas Crock ford 开发了一个内建于 javascript 的数据格式,称为javascript 对象表示(JSON,javascript Object Notation),意思是直接使用Ajax对象来传递信息,可以读作"Jason". 1. 什么是 JSON JSON概念很简单,JSON 是一种轻量级的数据格

Ajax中数据传递的另一种模式 javascript Object Notation思想(JSON)

Ajax是"异步javascript和XML"的缩写已经众所周知,然而虽然XML是看上去的重要组成部分,它却不是必须的.一位资深的软件工程师Douglas Crock ford 开发了一个内建于 javascript 的数据格式,称为javascript 对象表示(JSON,javascript Object Notation),意思是直接使用Ajax对象来传递信息,可以读作"Jason". 1. 什么是 JSON JSON概念很简单,JSON 是一种轻量级的数据格

JSON+JavaScript处理JSON的简单例子_javascript技巧

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等).这些特性使JSON

iOS编程Cookbook第19章最后一个例子不能正常工作的解决办法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在Cookbook的第19章的11节中所要解决的是在App中显示iOS自带的日历编辑视图的问题. 例子代码是选择迄今为止1年前的第一个找到的日历事件,然后将其显示在日历编辑视图中. 日历编辑视图控制器是EKEventEditViewController的实例对象,按照书上的说明,其有一个event实例变量,如果在显示该控制器之前不对其赋值,即其值为nil则出现

《Windows 8 开发权威指南:HTML5 和JavaScript卷》——第2章 HTML5 JavaScript概述以及新特性 2.1 HTML5概述

第2章 HTML5 JavaScript概述以及新特性 2.1 HTML5概述 HTML5已经推出,Web也不会是一成不变的. 以前你一定听说过这句话或类似的内容. 我想,当你听到这句话时,可能会变得很激动,转动眼珠.皱着眉头一脸疑问. 也可能这三种反应你都有.有这些反应,我非常能理解. HTML5 十分令人称道,正如我们所知,它可能会改变 Web,但它的作用也被夸大了. 而且,它的真正意义还难以琢磨. 在使用 HTML5 构建应用程序时,我自己也有过上面所说的每一种反应. HTML5 是一个宽

socket 第19章#include &amp;amp;lt;net/pfkeyv2.h&amp;amp;gt;这个库函数为什么会出错

问题描述 socket 第19章#include <net/pfkeyv2.h>这个库函数为什么会出错 g++ -g dump.c -o dump dump.c:2:25: fatal error: net/pfkeyv2.h: No such file or directory #include 这个头文件是c++标准库函数吧,为什么提示没有呢? 解决方案 你看看环境变量路径是否正确,应该是没有找到.可以在网上下载一个放到相应的路径里.

第19章 解释器模式(Interpreter Pattern)

原文 第19章 解释器模式(Interpreter Pattern) 解释器模式        导读:解释器模式,平常用的比较的少,所以在写这个模式之前在博客园搜索了一番,看完之后那叫一个头大.篇幅很长,我鼓足了劲看了半天的描述跟解释,可能是本人的水平有限,或者是耐心太差,看到一半就有点扛不住了.我感觉对于一个菜鸟或者是没接触过设计模式的人来说,在看设计模式的时候更希望作者能简短的用几行代码来描述设计模式,这样起码看完大体有个概念.           概述:          Interpre

深入剖析JavaScript:Object类型_基础知识

在JavaScript中,引用类型是一种数据结构,用于将数据和功能组织在一起. 对象是某个特定引用类型的实例.对象的创建方式: var person = new Object(); 上面的例子创建了Object引用类型的一个新实例,然后把该实例保存在变量person中. 创建对象有构造函数和对象字面量两种方式. 1.构造函数方式 使用new操作符后跟Object构造函数. var p = new Obejct(); p.name = "萧萧弈寒"; p.age = 18: 2.对象字面

《HTML 5与CSS 3权威指南(第3版·下册)》——第19章 选 择 器

第19章 选 择 器本章针对CSS 3中使用的各种选择器进行详细介绍,通过选择器的使用,你不再需要在编辑样式时使用多余的以及没有任何语义的class属性,而是直接将样式与元素绑定起来,从而节省大量在网站或Web应用程序已经完成之后修改样式时所需花费的时间.学习内容:掌握CSS 3中使用的选择器的基本概念.知道什么是选择器以及为什么需要使用选择器,使用选择器有什么好处.掌握CSS 3中的各种属性选择器的概念以及使用方法,其中包括:[att=val]选择器[att*=val]选择器[att^=val