一、json简介
json指的是javascript对象表示法(javascript object notation),它是一种轻量级文本数据交换格式,类似于xml,但比xml更小,更快,更易解析(xml需要下载到手机端进行解析);
json是基于javascript的一个子集,它使用javascript语法来描述数据对象,但是json任然独立于语言和平台,json解析器和json库支持许多不同编程语言,同时也易于机器解析和生成;
二、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代码不再给出
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);
Listlist2=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);
Listlist3=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>list4=JsonTools.getListMap("listMap", jsonString4);
tv_show.setText(list4.toString());
Log.i(TAG, list4.toString());
}
}
}
/********************************************************************************************************************************************************************************/
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;
}
}
/************************************************************************************************************************************************************************************/
public class JsonTools {
public JsonTools() {
}
/**
* 获取对象数据
* @param key
* @param jsonString
* @return
*/
public static Person getPerson(String key,String jsonString){
Person person=newPerson();
try {
//构建一个JSONObject jsontokener
JSONObject jsonObject=newJSONObject(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 ListgetPersons(String key,String jsonString){
Listlist=newArrayList();
try {
JSONObject jsonObject=newJSONObject(jsonString);
//返回json的数组
JSONArray jsonArray=jsonObject.getJSONArray(key);
for(int i=0;i
JSONObject jsonObject2=jsonArray.getJSONObject(i);
Person person=newPerson();
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 ListgetList(String key,String jsonString){
Listlist=newArrayList();
try {
JSONObject jsonObject=newJSONObject(jsonString);
JSONArray jsonArray=jsonObject.getJSONArray(key);
for(int i=0;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>getListMap(String key,String jsonString){
List>list=newArrayList>();
try {
JSONObject jsonObject=newJSONObject(jsonString);
JSONArray jsonArray=jsonObject.getJSONArray(key);
for(int i=0;i
JSONObject jsonObject2=jsonArray.getJSONObject(i);
Mapmap=newHashMap();
Iteratoriterator=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;
}
}
/************************************************************************************************************************************************************************************/
public class HttpUtils {
/*
* 打开远程链接getContent
*/
public HttpUtils() {
}
public static String getJsonContent(String path){
try {
//指定资源参数实例
URL url=newURL(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=newByteArrayOutputStream();
int len=0;
byte[] data=newbyte[1024];
try {
while((len=inputStream.read(data))!=-1){
outputStream.write(data,0,len);
}
jsonString=newString(outputStream.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return jsonString;
}
}