Androidでのデータファイル解析(Json解析)


まずJsonデータの最も基本的な特徴を話して、Jsonデータは一連のキー値の対の集合で、XMLデータと比べて、Jsonデータの体積は更に小さくて、伝送効率は高くて、解析しやすくて、しかし可読性は高くありません;
今回はサーバ側からJsonデータを入手し、解析したデータをAndroidクライアントに表示するため、まずサーバ側コードを配備する(Jsp/Servletを直接使用):
構築されたJsonデータは次のとおりです.
[{"name":[張三],[address]:[北京],[age]:20},{"name":[李四],[address]:[上海],[age]:30},{[name]:[王五],[address]:[深セン],[age]:35}]
[一]サーバ側(Person.java省略):
①:データ構造JsonServices.java
public class JsonService {
public static List<Person> getListPerson() {
List<Person> mLists = new ArrayList<Person>();
mLists.add(new Person("  ", "  ", 20));
mLists.add(new Person("  ", "  ", 30));
mLists.add(new Person("  ", "  ", 35));
return mLists;
}

②:サーブレットのコード(Jsonデータを構築することを含む、Jsonデータ変換方法を使用しない)Jsonサーブレット.java
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
List<Person> persons = JsonService.getListPerson();
StringBuffer sb = new StringBuffer();
sb.append('[');
for (Person person : persons) {
sb.append('{').append("\"name\":").append("\""+person.getName()+"\"").append(
",");
sb.append("\"address\":").append("\""+person.getAddress()+"\"").append(",");
sb.append("\"age\":").append(person.getAge());
sb.append('}').append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append(']');
out.write(new String(sb));
out.flush();
out.close();
}

③:Tomactブラウザ入力に配備http://localhost/JsonWeb/JsonServlet直接アクセスの結果は次のとおりです.
これでサーバ側コードの符号化が完了し、次にクライアントコードの作成を行う.
  
(二)クライアント(Personクラス、展示データのレイアウトファイルは簡単に省くため)
①:サーバ側のJsonデータを取得し解析するツールクラスJsonParse.java
必要に応じてインポートするパッケージを省く
public class JsonParse {
/**
*   Json  
* 
* @param urlPath
* @return mlists
* @throws Exception
*/
public static List<Person> getListPerson(String urlPath) throws Exception {
List<Person> mlists = new ArrayList<Person>();
byte[] data = readParse(urlPath);
JSONArray array = new JSONArray(new String(data));
for (int i = 0; i < array.length(); i++) {
JSONObject item = array.getJSONObject(i);
String name = item.getString("name");
String address = item.getString("address");
int age = item.getInt("age");
mlists.add(new Person(name, address, age));
}
return mlists;
}
/**
*     url       
* 
* @param urlPath
* @return     
* @throws Exception
*/
public static byte[] readParse(String urlPath) throws Exception {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int len = 0;
URL url = new URL(urlPath);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream inStream = conn.getInputStream();
while ((len = inStream.read(data)) != -1) {
outStream.write(data, 0, len);
}
inStream.close();
return outStream.toByteArray();
}
}

②:主Activityクラス
public class MainActivity extends Activity {
private Button mButton;
private ListView mListView;
//  IP    localhost  127.0.0.1,  android         IP,         IP
private static final String urlPath = "http://10.16.31.207/JsonWeb/JsonServlet";
private static final String TAG = "MainActivity";
private List<Person> persons;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mButton = (Button) findViewById(R.id.button1);
mListView = (ListView) findViewById(R.id.listView1);
mButton.setOnClickListener(new MyOnClickListener());
}

private class MyOnClickListener implements OnClickListener {
@Override
public void onClick(View v) {
try {
//   Json        
persons = JsonParse.getListPerson(urlPath);
List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < persons.size(); i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("name", persons.get(i).getName());
map.put("address", persons.get(i).getAddress());
map.put("age", persons.get(i).getAge());
data.add(map);
}
//      ,      
SimpleAdapter _Adapter = new SimpleAdapter(MainActivity.this,
data, R.layout.listview_item, new String[] { "name",
"address", "age" }, new int[] { R.id.textView1,
R.id.textView2, R.id.textView3 });
mListView.setAdapter(_Adapter);
} catch (Exception e) {
Toast.makeText(MainActivity.this, "    ", 2000).show();
Log.i(TAG, e.toString());

}
}
}