一、json简介
json指的是javascript对象表示法(javascript object notation),它是一种轻量级文本数据交换格式,类似于xml,但比xml更小,更快,更易解析(xml需要下载到手机端进行解析);
json是基于javascript的一个子集,它使用javascript语法来描述数据对象,但是json任然独立于语言和平台,json解析器和json库支持许多不同编程语言,同时也易于机器解析和生成;
优酷:http://v.youku.com/v_show/id_XODYzMTEwODY4.html
爱奇艺:http://www.iqiyi.com/w_19rsb9thy1.html#vfrm=5-7-4-1(涉及服务器的搭建可见视频)
二、json数据解析
1、json object(多个,也可以单个)
{"person":{"address":"上海黄浦区","id":1001,"name":"jack"}}
2、解析,一个对象,多组值,可以使用相同的语法表示多个值(每个值包含多个记录):
这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目,记录中实际的名称 / 值对可以
不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表 示数据的方式,甚至可以以不同方式表示同一事物。
{"persons":[{"address":"上海黄浦区","id":1001,"name":"jack"},{"address":"上海闵行区","id":1002,"name":"rose"},{"address":"上海黄浦区","id":1003,"name":"mick"}]}
3、解析json Array
{"listString":["北京","上海","湖南"]}
4、解析json object 和 json array 混合对象
{"listMap":[{"id":1001,"address":"北京","name":"jack"},{"id":1001,"address":"上海","name":"rose"}]}
文件目录:
activity_main.xml代码不再给出
[html] view plaincopy
public class MainActivity extends Activity {
private Button btn_person;
private Button btn_persons;
private Button btn_listString;
private Button btn_listMap;
private TextView tv_show;
private static String PATH = "http://192.168.1.100:8080/2.9/com/JsonServlet";
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_person = (Button)findViewById(R.id.btn_person);
btn_persons = (Button)findViewById(R.id.btn_persons);
btn_listString = (Button)findViewById(R.id.btn_listString);
btn_listMap = (Button)findViewById(R.id.btn_listMap);
tv_show = (TextView)findViewById(R.id.tv_show);
btn_person.setOnClickListener(new MyButtonListenerPersion());
btn_persons.setOnClickListener(new MyButtonListenerPersions());
btn_listString.setOnClickListener(new MyButtonListenerlistString());
btn_listMap.setOnClickListener(new MyBuutonListenerlistMap());
}
class MyButtonListenerPersion implements OnClickListener{
@Override
public void onClick(View v) {
String path1=PATH+"?action_flag=person";
String jsonString1 = HttpUtils.getJsonContent(path1);
Person person = JsonTools.getPerson("person", jsonString1);
tv_show.setText(person.toString());
Log.i(TAG, person.toString());
}
}
class MyButtonListenerPersions implements OnClickListener{
@Override
public void onClick(View v) {
String path2=PATH+"?action_flag=persons";
String jsonString2 = HttpUtils.getJsonContent(path2);
List<Person> list2 = JsonTools.getPersons("persons", jsonString2);
tv_show.setText(list2.toString());
Log.i(TAG, list2.toString());
}
}
class MyButtonListenerlistString implements OnClickListener{
@Override
public void onClick(View v) {
String path3=PATH+"?action_flag=listString";
String jsonString3 = HttpUtils.getJsonContent(path3);
List<String> list3 = JsonTools.getList("listString", jsonString3);
tv_show.setText(list3.toString());
Log.i(TAG, list3.toString());
}
}
class MyBuutonListenerlistMap implements OnClickListener{
@Override
public void onClick(View v) {
String path4=PATH+"?action_flag=listMap";
String jsonString4 = HttpUtils.getJsonContent(path4);
List<Map<String,Object>> list4 = JsonTools.getListMap("listMap", jsonString4);
tv_show.setText(list4.toString());
Log.i(TAG, list4.toString());
}
}
}
/********************************************************************************************************************************************************************************/
[html] view plaincopy
public class Person {
private int id;
private String name;
private String address;
public Person() {
super();
}
public Person(int id, String name, String address) {
super();
this.id = id;
this.name = name;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "address=" + address + ", id=" + id + ", name=" + name;
}
}
/************************************************************************************************************************************************************************************/
[html] view plaincopy
public class JsonTools {
public JsonTools() {
}
/**
* 获取对象数据
* @param key
* @param jsonString
* @return
*/
public static Person getPerson(String key,String jsonString){
Person person = new Person();
try {
//构建一个JSONObject jsontokener
JSONObject jsonObject = new JSONObject(jsonString);
//得到JSONObject值与密钥相关,就是对象
JSONObject personObject = jsonObject.getJSONObject(key);
//取得数据
person.setId(personObject.getInt("id"));
person.setName(personObject.getString("name"));
person.setAddress(personObject.getString("address"));
} catch (JSONException e) {
e.printStackTrace();
}
return person;
}
/**
* 获取对象数组数据
* @param key
* @param jsonString
* @return
*/
public static List<Person> getPersons(String key,String jsonString){
List<Person> list = new ArrayList<Person>();
try {
JSONObject jsonObject = new JSONObject(jsonString);
//返回json的数组
JSONArray jsonArray = jsonObject.getJSONArray(key);
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
Person person = new Person();
person.setId(jsonObject2.getInt("id"));
person.setName(jsonObject2.getString("name"));
person.setAddress(jsonObject2.getString("address"));
list.add(person);
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}
/**
* 获取String数组数据
* @param key
* @param jsonString
* @return
*/
public static List<String> getList(String key,String jsonString){
List<String> list = new ArrayList<String>();
try {
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray jsonArray = jsonObject.getJSONArray(key);
for(int i=0;i<jsonArray.length();i++){
String msg = jsonArray.getString(i);
list.add(msg);
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}
/**
* 获取对象的Map集合数据
* @param key
* @param jsonString
* @return
*/
public static List<Map<String,Object>> getListMap(String key,String jsonString){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
try {
JSONObject jsonObject = new JSONObject(jsonString);
JSONArray jsonArray = jsonObject.getJSONArray(key);
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
Map<String,Object> map = new HashMap<String, Object>();
Iterator<String> iterator = jsonObject2.keys();
while(iterator.hasNext()){
String json_key = iterator.next();
Object json_value = jsonObject2.get(json_key);
if(json_value==null){
json_value = "";
}
map.put(json_key, json_value);
}
list.add(map);
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}
}
/************************************************************************************************************************************************************************************/
[html] view plaincopy
public class HttpUtils {
/*
* 打开远程链接getContent
*/
public HttpUtils() {
}
public static String getJsonContent(String path){
try {
//指定资源参数实例
URL url = new URL(path);
//url.openConnection()指定打开一个远程资源
//HttpURLConnection抽象的Http连接方法extends URLConnection
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
//在3秒内不能建立连接,将抛异常
connection.setConnectTimeout(3000);
//设置请求的命令将被发送到远程HTTP服务器。这个方法只能在连接称为。
connection.setRequestMethod("GET");
//设置标志指示是否允许输入这个URLConnection
connection.setDoInput(true);
//得到服务器返回的参数值
int code = connection.getResponseCode();
if(code == 200){
return changeInputStream(connection.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 将一个输入流转换成指定编码的字符串
* @param inputStream
* @return
*/
private static String changeInputStream(InputStream inputStream) {
String jsonString = "";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
int len = 0;
byte[] data = new byte[1024];
try {
while((len=inputStream.read(data))!=-1){
outputStream.write(data,0,len);
}
jsonString = new String(outputStream.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return jsonString;
}
}
本文出自 “7851921” 博客,请务必保留此出处http://7861921.blog.51cto.com/7851921/1598643
原文地址:http://7861921.blog.51cto.com/7851921/1598643