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数据,在其官⽹有详细讲解,有兴趣的可以去研究。
⼆、下载jar依赖包
这⾥以json-lib-2.3.jar包为例,此包需要依赖其它的⼯具包才能正常使⽤,程序中除了导⼊json-lib-2.3.jar包之外,其它依赖包也要导⼊进去。所有包如下图:
这⾥顺便给出要给下载地址:
三、将⼯具包添加到⼯程中
⾸先,将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" );
java arraylist用法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.SocketTimeoutException;
import java.URL;
import java.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("api.k780: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(
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 = JSONObject("result");
JSONArray ja = JSONArray("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", String("days"));
map.put("week", String("days"));
map.put("citynm", String("citynm"));
map.put("temperature", String("temperature"));
map.put("weather", String("weather"));
map.put("wind", String("wind"));
list.add(map);
}
//
// 控制台打印出天⽓
for (int j = 0; j < list.size(); j++) {
Map<String, Object> wMap = (j);
System.out.("citynm") + "\t" + ("days")
+ "\t" + ("week") + "\t" + ("weather")
+ "\t" + ("temperature") + "\t" + ("wind"));
}
}
public static void main(String[] args) {
try {
new Weather("101010100"); // 101010100(北京)就是你的城市代码
} catch (Exception e) {
e.printStackTrace();
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论