先上图:

首先定义了Json数据:

{ "persons": [

{ "id": "1", "status":"大徙弟", "name": "孙悟空", "tool": "金箍棒", "number": "杀死了50只妖怪" },

{ "id": "2", "status":"二徙弟", "name": "猪八戒", "tool": "九齿钉耙", "number": "杀死了43只妖怪" },

{ "id": "3", "status":"三徙弟", "name": "沙和尚", "tool": "降妖宝杖", "number": "杀死了33只妖怪" }

]}

接下来就是定义javaBean了,对于java开发来说,javaBean可以很方便地存储和管理数据

public class Person

{

private String id;

private String status;

private String name;

private String tool;

private String number;

public String getId()

{

return id;

}

public void setId(String id)

{

this.id = id;

}

public String getStatus()

{

return status;

}

public void setStatus(String status)

{

this.status = status;

}

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

public String getTool()

{

return tool;   www.2cto.com

}

public void setTool(String tool)

{

this.tool = tool;

}

public String getNumber()

{

return number;

}

public void setNumber(String number)

{

this.number = number;

}

@Override

public String toString()

{

return "Person [id=" + id + ", status=" + status + ", name=" + name

+ ", tool=" + tool + ", number=" + number + "]";

}

}

接下来就是Json的处理了,定义了一个JsonHandler类

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.List;

import org.json.JSONArray;

import org.json.JSONObject;

public class JsonHandler

{

private InputStream input;

private List<Person> persons;

private Person person;

public JsonHandler()

{

}

public JsonHandler(InputStream input)

{

this.input = input;

}

public void setInput(InputStream input)

{

this.input = input;

}

public List<Person> getPersons()

{

persons = new ArrayList<Person>();

try

{

//自定义方法,从输入流中取得字符串

String json_str = getJsonString(input);

//通过字符串生成Json对象

JSONObject object = new JSONObject(json_str);

//将Json对象中的persons数据转换成Json数组

JSONArray array = object.getJSONArray("persons");

//数组长度

int length = array.length();

for (int i = 0; i < length; i++)

{

//将每一个数组再转换成Json对象

JSONObject obj = array.getJSONObject(i);

person = new Person();

person.setId(obj.getString("id"));

person.setStatus(obj.getString("status"));

person.setName(obj.getString("name"));

person.setTool(obj.getString("tool"));

person.setNumber(obj.getString("number"));

persons.add(person);

}

return persons;

} catch (Exception e)

{

e.printStackTrace();

}

return null;

}

/**

* 将输入流中数据整合成字符串

*

* @param input

*            输入流

* @return

* @throws Exception

*/

private String getJsonString(InputStream input) throws Exception

{

BufferedReader reader = new BufferedReader(new InputStreamReader(input));

StringBuilder sb = new StringBuilder();

for (String s = reader.readLine(); s != null; s = reader.readLine())

{

sb.append(s);

}

return sb.toString();

}

}

OK,到这里数据应该能解析出来了,可以通过测试类来测试一下,呵呵,我还是比较喜欢边测试边做下一步开发

import java.io.File;

import java.io.FileInputStream;

import java.util.List;

import android.os.Environment;

import android.test.AndroidTestCase;

public class HandlerTest extends AndroidTestCase

{

public void testJsonGetPersons()

{

// 取得当前SD目录下的文件路径

File SD_Files = Environment.getExternalStorageDirectory();

// 取得persons.xml文件的路径,这里我是存在sdcard/data.json

String file_path = SD_Files.getName() + File.separator + "data.json";

try

{

FileInputStream fis = new FileInputStream(new File(file_path));

JsonHandler jsonHandler = new JsonHandler(fis);

List<Person> persons = jsonHandler.getPersons();

System.out.println(persons);

} catch (Exception e)

{

e.printStackTrace();

}

}

}

好,测试没问题了,那我们就上主Activity类了

import java.io.File;

import java.io.FileInputStream;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.app.Activity;

import android.os.Bundle;

import android.os.Environment;

import android.widget.ListView;

import android.widget.SimpleAdapter;

public class JsonActivity extends Activity

{

private ListView listView;

private SimpleAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState)

{

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.xml_handler);

listView = (ListView) findViewById(R.id.xml_list);

try

{

// 自完义适配方法

getAdapter();

} catch (Exception e)

{

e.printStackTrace();

}

listView.setAdapter(adapter);

}

private void getAdapter() throws Exception

{

List<Map<String, String>> lists = new ArrayList<Map<String, String>>();

//取得SD卡目录

File SD_Files = Environment.getExternalStorageDirectory();

//取得文件路径

String file_path = SD_Files.getName() + File.separator + "data.json";

//Json处理

FileInputStream fis = new FileInputStream(new File(file_path));

JsonHandler jsonHandler = new JsonHandler(fis);

List<Person> persons = jsonHandler.getPersons();

// 将persons中的数据转换到ArrayList<Map<String,String>>中

// String>>中,因为SimpleAdapter要用这个类型的数据进行适配

Map<String, String> map;

for (Person p : persons)

{

map = new HashMap<String, String>();

map.put("id", p.getId());

map.put("status", p.getStatus());

map.put("name", p.getName());

map.put("tool", p.getTool());

map.put("number", p.getNumber());

lists.add(map);

}

// HashMap<String, String>中的key

String[] from = { "id", "status", "name", "tool", "number" };

// list_item.xml中对应的控件ID

int[] to = { R.id.item_id, R.id.item_status, R.id.item_name,

R.id.item_tool, R.id.item_number };

adapter = new SimpleAdapter(this, lists, R.layout.handler_list_item,

from, to);

}

}

这里面还定义了几个Layout,也一起送上吧:

xml_handler.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="match_parent"

android:layout_height="match_parent">

<TextView android:textAppearance="?android:attr/textAppearanceMedium"

android:layout_width="wrap_content" android:text="唐僧的三个徙弟"

android:layout_height="wrap_content" android:id="@+id/textView1"

android:paddingLeft="10dip" android:paddingBottom="10dip"></TextView>

<ListView android:id="@+id/xml_list" android:layout_height="wrap_content"

android:layout_width="match_parent"></ListView>

</LinearLayout>

handler_list_item.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="match_parent"

android:layout_height="match_parent" android:paddingLeft="10dip"

android:paddingRight="10dip">

<LinearLayout android:id="@+id/linearLayout1"

android:layout_height="wrap_content" android:layout_width="match_parent">

<TextView android:textAppearance="?android:attr/textAppearanceMedium"

android:layout_width="wrap_content" android:text="TextView"

android:layout_height="wrap_content" android:id="@+id/item_id" android:paddingRight="30dip"></TextView>

<TextView android:textAppearance="?android:attr/textAppearanceMedium"

android:layout_width="wrap_content" android:text="TextView"

android:layout_height="wrap_content" android:id="@+id/item_status" android:paddingRight="30dip"></TextView>

<TextView android:textAppearance="?android:attr/textAppearanceMedium"

android:layout_width="wrap_content" android:text="TextView"

android:layout_height="wrap_content" android:id="@+id/item_name"></TextView>

</LinearLayout>

<LinearLayout android:id="@+id/linearLayout2"

android:layout_height="wrap_content" android:layout_width="match_parent">

<TextView android:textAppearance="?android:attr/textAppearanceMedium"

android:layout_width="wrap_content" android:text="TextView"

android:layout_height="wrap_content" android:id="@+id/item_tool" android:paddingRight="30dip"></TextView>

<TextView android:textAppearance="?android:attr/textAppearanceMedium"

android:layout_width="wrap_content" android:text="TextView"

android:layout_height="wrap_content" android:id="@+id/item_number"></TextView>

</LinearLayout>

</LinearLayout>

好了,Json的数据处理我们也学习完了.

对Json数据的处理(模拟获取数据是来自于本地)相关推荐

  1. vue前端常用的三种方式模拟获取数据

    前端的三种方式模拟获取数据 1⃣️.mockjs插件获取: 1.首先我们先进行安装mockjs,进入项目在终端输入:npm install mockjs --save 2.我们可以在src目录下新建m ...

  2. 百度LBS服务我们自己上传数据,我们客户端获取数据然后进行小黄车和膜拜单车定位描点等骚操作

    一,演示和需求的SDK和ak等配置最近我们一个项目需要自己android端上传数据到百度LBS服务,然后获取数据并显示.搞了2天完成了.其实很简单的哦!我们一步步来,今天的活我一小时搞定,一天写博客, ...

  3. Silverlight实用窍门系列:66.Silverlight的数据模板DataTemplate(二)获取数据模板控件...

    在Silverlight中我们使用了数据模板,在很多时候也需要获取到数据模板上的控件,并且进行改变.本文使用的实例数据源和上节相同,如需了解请下载源码查看. 当然在这里我们可以分为获取数据模板原始控件 ...

  4. php中获取数据表数据,从表中获取数据到PHP

    我有一张桌子,我在其中使用j-query动态添加行 我想从每个字段中获取数据到我的php中,并在按下提交时对其进行处理,或者我们可以使用j-query遍历表以获取所有值并将其放入数组中,我不知道如何要 ...

  5. list vue 添加数据方法_vue ajax获取数据填充列表,增加,删除

    Document 添加品牌 Name: IdNameCtimeOperation {{item.id}}{{item.name}}{{item.ctime}} 删除 // 如果我们通过全局配置了,请求 ...

  6. 如何在HHDI中进行数据质量探查并获取数据剖析报告

    通过执行多种数据剖析规则,对目标表(或一段SQL语句)进行数据质量探查,从而得到其数据质量情况.目前支持以下几种数据剖析类型,分别是:数字值分析.值匹配检查.字符值分析.日期值分析.布尔值分析.重复值 ...

  7. hbase操作,创建命名空间,创建hbase表,添加数据,删除数据,通过RowKey获取数据,扫描数据,获取所有的表,获取ColumnFamily,删除表,获取hbase命名空间

    1.创建hbase工程 2 编写config.properties # hbase信息 hbase.zookeeper.quorum=xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx,x ...

  8. 在React中获取数据

    React初学者经常从不需要获取数据的应用开始.他们经常面临一个计数器,任务列表获取井字棋游戏应用.这是很好的,因为在开始学习React的时候,数据获取在你的应用中添加了另一层复杂度. 然而,有些时候 ...

  9. apiCloud中api.ajax方法跨域传参获取数据

    apiCloud中的ajax方法,可以自动处理跨域访问数据,不必使用jsonp来处理了. 使用ajax方法,必须要在apiready = function() {}方法中 获取参数 var pageP ...

  10. angularjs 读取mysql_如何使用AngularJS PHP从MySQL获取数据

    1.表结构 我在教程示例中使用users表.CREATE TABLE `users` ( `id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, `fnam ...

最新文章

  1. JAVA_IO流四大家族(1)
  2. 转:手机流畅的决定性因素
  3. oracle的临时表和With As总结
  4. 只有在人生的最低处才能看清这个世界
  5. linux open函数使用,linux中open函数使用
  6. tsql创建表_在序列中创建缺口– TSQL存储过程顾问
  7. Emacs编辑Nginx
  8. 基础选择器之通配符选择器(CSS、HTML)
  9. iframe并没有错
  10. matlab三维矩阵的运算符,【求助】多维矩阵求和运算!!
  11. 负载均衡(负载平衡)
  12. Windows10重装系统教程(超详细)
  13. 如何将图片转成png格式?图片的格式怎么转换
  14. 1083 Windy数(数位dp)
  15. AndroidStudio 制作一个超简易记账本App(1.0)【含详细步骤】
  16. Matlab的插值与拟合
  17. 六、Rewrite重写
  18. vue引入jquery的方法
  19. Mac录屏软件:Record It
  20. 如何在Mac上删除iPhone和iPad iCloud备份?

热门文章

  1. Spring学习02-Spring中的设计模式(一)
  2. 测试微信好友是否删除软件,如何测试微信好友是否删了你?
  3. 云桌面终端CT3200,硬件与信号连接
  4. android模拟器pc版 安装软件,不用花钱,电脑端Android模拟器安装使用教程
  5. azure kinect 深度相机原理
  6. 第三方支付操作流程,有何优势,又存在哪些风险?
  7. 泰坦尼克号沉没之谜,用数据还原真相——Titanic获救率分析(用pyecharts)
  8. 算法题目打卡:Ques20201017
  9. 渗透测试技术----服务扫描(一)--Banner、服务版本扫描、操作系统识别
  10. 【C++】(八)函数