android json对象合并的方法,android json 解析

一、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"}]}

文件目录:

34ff46d5ae3e4909e45961c1dcff0d34.png

activity_main.xml代码不再给出

45d0d1078db14552cbdac2dd5f1a579a.png

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值