Java入门系列:处理Json格式数据
本节主要讲解:
1)json格式数据处理方法
2)第三方工具包的使用方法
3)java集合数据类型
【项目任务】
编写一个程序,显示未来的天气信息。
【知识点解析】
为了方便后面代码的分析,先需要掌握几个相关的知识。
1.什么是json格式数据
从结构上看,我们所见到的所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词。
第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组(array)或列表(List),比如"北京,上海"。
第三种类型是映射(mapping),也就是一个名/值对(Name/value),即数据有一个名称,还有一个与之相对应的值,这又称作散列(hash)或字典(dictionary),比如"首都:北京"。
json是一种数据格式规则,给出了一套上述三种结构的数据的描述规则,满足这一规则的数据叫做json数据。
json规则如下:
1) 并列的数据之间用逗号(", ")分隔。
2) 映射用冒号(": ")表示。
3) 并列数据的集合(数组)用方括号("[]")表示。
4) 映射的集合(对象)用大括号("{}")表示。
上面四条规则,就是Json格式的所有内容。
比如,下面这句话:
"北京市的面积为16800平方公里,常住人口1600万人。上海市的面积为6400平方公里,常住人口1800万。"
写成json格式就是这样:
[
{"城市":"北京","面积":16800,"人口":1600},
{"城市":"上海","面积":6400,"人口":1800}
]
如果事先知道数据的结构,上面的写法还可以进一步简化:
[
["北京",16800,1600],
["上海",6400,1800]
]
有关json数据的更多介绍,请点击查看
2.如何使用json格式数据
在java中,对于json格式的数据,不能直接使用,需要先进行解析。这个解释过程包括将任何java格式的数据转换成json格式数据,或将json格式数据转换成java对象。目前有很多第三方json数据解析工具包,提供了非常方便的各种操作,可以直接使用到我们的程序中,自己不必亲自编写解析json的代码了。这些json解析工具中,json-lib使用比较简单,下面一起看看如何在自己程序中加入json-lib工具包。
一、介绍
JSON-lib包主要就是用来解析Json数据,在其官网http://www.json.org/上有详细讲解,有兴趣的可以去研究。
二、下载jar依赖包
这里以json-lib-2.3.jar包为例,此包需要依赖其它的工具包才能正常使用,程序中除了导入json-lib-2.3.jar包之外,其它依赖包也要导入进去。所有包如下图:

这里顺便给出要给下载地址:http://pan.baidu.com/s/1kVIrdEf
三、将工具包添加到工程中
首先,将jar 复制到myeclispe 工作空间下的,项目目录下!例如: 我的工程名叫 test, 工作空间在D:\MyProjects 所以只要把jar 复制到D:\MyProjects\test\下,然后,在myeclipse的项目“test”上右键 ->build path->config build path,显示librars 选项卡 ,点击add jars(在add 前,最后refresh 刷新下,否则你可能看不到你的项目名),将以上6个包逐个添加进去。添加完成后,项目结构如下:

添加完成后,在要用到json-lib工具的程序代码头部,将所要用到的类import进去即可。
下面例子是说明json工具的用法
package dataCollection;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONArray;
public class MainClass { public static void main(String[] args) {
// TODO Auto-generated method stub
List list = new ArrayList();
list.add( "first" );
list.add( "second" );
JSONArray jsonArray = JSONArray.fromObject( list );
System.out.println( jsonArray );
} }
上述代码将链表list转换成一个JSONArray对象,该对象包含的数据是json格式的数据:["first","second"]。
JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" );
System.out.println( jsonArray );
// 输出结果["json","is","easy"]
上述代码是将一个字符串"['json','is','easy']"转换成一个JSONArray对象,该对象所包含的数据是:["json","is","easy"]
package dataCollection;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONObject;
public class MainClass { public static void main(String[] args) {
// TODO Auto-generated method stub
String json = "{bool:true,integer:1,string:\"json\"}";
JSONObject jsonObject = JSONObject.fromObject( json );
System.out.println(jsonObject);
} }
上述代码是将一个字符串 "{bool:true,integer:1,string:\"json\"}"转换成一个JSONObject对象,该对象所包含的数据是:{bool:true,integer:1,string:\"json\"}
想要了解json-lib包更详细的用法,请点击官网
【实践训练】
将未来7天天气信息在控制台打印输出,每天一行。
package dataCollection; import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import net.sf.json.JSONArray;
import net.sf.json.JSONObject; /**
* 得到未来7天的天气(含今天)
*
* @author ww
*
*/
public class Weather { public Weather(String Cityid) throws IOException, NullPointerException {
String Ctiyid;
URLConnection connectionData;
StringBuilder sb;
BufferedReader br;// 读取data数据流
JSONObject jsonData;
JSONObject info; // 连接中央气象台的API
URL url = new URL("http://api.k780.com:88/?app=weather.future&weaid=" + Cityid + "&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json");
connectionData = url.openConnection();
connectionData.setConnectTimeout(1000); sb = new StringBuilder();
try {
br = new BufferedReader(new InputStreamReader(
connectionData.getInputStream(), "UTF-8")); String line = null;
while ((line = br.readLine()) != null){
sb.append(line);
}
} catch (SocketTimeoutException e) {
System.out.println("连接超时");
} catch (FileNotFoundException e) {
System.out.println("加载文件出错");
}
String datas = sb.toString(); //解析json数据
jsonData = JSONObject.fromObject(datas); //info = jsonData.getJSONObject("result");
JSONArray ja = jsonData.getJSONArray("result");
// 得到1到6天的天气情况
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for(int i = 0;i < ja.size();i++){
Map<String,Object> map = new HashMap<String,Object>();
JSONObject jobj = ja.getJSONObject(i);
map.put("days", jobj.getString("days"));
map.put("week", jobj.getString("days"));
map.put("citynm", jobj.getString("citynm"));
map.put("temperature", jobj.getString("temperature"));
map.put("weather", jobj.getString("weather"));
map.put("wind", jobj.getString("wind"));
list.add(map);
}
//
// 控制台打印出天气
for (int j = 0; j < list.size(); j++) {
Map<String, Object> wMap = list.get(j);
System.out.println(wMap.get("citynm") + "\t" + wMap.get("days")
+ "\t" + wMap.get("week") + "\t" + wMap.get("weather")
+ "\t" + wMap.get("temperature") + "\t" + wMap.get("wind"));
} } public static void main(String[] args) {
try {
new Weather("101010100"); // 101010100(北京)就是你的城市代码
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java入门系列:处理Json格式数据的更多相关文章
- EasyUI+JSP之java读取数据库后JSON格式数据的返回及调用
做作业工程中遇到一些问题,特此记录一下 解决的问题:使用EasyUI框架搭建简单学生管理系统(数据库增删改查)操作时配合JSP,不知道如何把从数据库获得的数据封装成JSON格式并传回前端JSP并进行展 ...
- java与javascript之间json格式数据互转
javascript中对象与字符串的互转 对象转为字符串:通过JSON.encode方法,这个是json.js里面的方法,引入到当前文件就可以了. 字符串转换为对象:①使用JSON.decode方法, ...
- JSON(三)——java中对于JSON格式数据的解析之json-lib与jackson
java中对于JSON格式数据的操作,主要是json格式字符串与JavaBean之间的相互转换.java中能够解析JSON格式数据的框架有很多,比如json-lib,jackson,阿里巴巴的fast ...
- fastJson java后台转换json格式数据
什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...
- java将XML文档转换成json格式数据
功能 将xml文档转换成json格式数据 说明 依赖包:1. jdom-2.0.2.jar : xml解析工具包;2. fastjson-1.1.36.jar : 阿里巴巴研发的高性能json工具包 ...
- java保存json格式数据,保存字符串和读取字符串
1.java保存json格式数据,保存字符串和读取字符串 import java.io.*; class RWJson { public void wiite(String s, String toS ...
- java后台对json格式数据的解析
Json 和 Jsonlib 的使用 什么是 Json JSON(JvaScript Object Notation)(官网网站:http://www.json.org/)是 一种轻量级的数据交换格式 ...
- fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map
作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...
- ObjectMapper用于将java对象转换为json格式数据以及JSONObject对象解析json格式数据
ObjectMapper objectMapper = new ObjectMapper(); //反序列化的时候如果多了其他属性,不抛出异常 objectMapper.configure(Deser ...
随机推荐
- python正则表达式,以及应用[下载图片]
regular expresion由一系列特定字符及其组合成的字符串,用来对目标字符串进行过滤操作.. re相关知识点 python正则表达式库为re,用import re导入,在然后用re.comp ...
- rest_framework_api规范
目录 一.什么是RESTful 二.什么是API 三.RESTful API规范 四.基于Django实现API 五.基于Django Rest Framework框架实现 一. 什么是RESTful ...
- React.js - 入门
React.js - 第1天 1. React简介 React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 ...
- js循环复制一个div
<html> <head> <title>Test of cloneNode Method</title> <script type=" ...
- 四则运算截图and代码
1.运行截图 2.代码 #include<stdio.h> #include<stdlib.h> int main() { int i=300; int a=0; while( ...
- Scrum 7.0
Sprint回顾 让我们一次比一次做得更好. 1.回顾组织 主题:“我们怎样才能在下个sprint中做的更好?” 时间:设定为1至2个小时. 参与者:整个团队. 场所:能够在不受干扰的情况下讨论. ...
- 通用的将Excel导入数据集的方法
http://blog.csdn.net/baronyang/article/details/7048563
- Selenium_IDE的基本使用及脚本解析
Selenium确实还是很强大的.根据我以往的经验,这个东西在web测试里的作用还是相当大的.经过近期研究,暂时对基本运作方式有了一定了 解,依旧找个实例记录一下.本段脚本实现的是网易返现个人中心登录 ...
- 很有用的高级 Git 命令
10 个很有用的高级 Git 命令 迄今,我已经使用Git很长一段时间了,考虑分享一些不管你是团队开发还是个人项目,都受用的高级git命令. 1. 输出最后一次提交的改变 这个命令,我经常使用它 来发 ...
- Mysql高并发情况下的解决方案(转)
查询了下Mysql 关于高并发的处理的资料,在这记录一下. 高并发大多的瓶颈在后台数据逻辑处理,在存储,mysql的正常的优化方案如下: 1.代码中sql语句优化 2.数据库字段优化,索引优化 3.加 ...