Json数据的定义:
String jsonlzz = “{\“name”\:\"lzz\",\"age\":100,\"arr\":[1,2,3,4,\"swpu\"]}”;
其中的name就是其数据的第一个属性,值为”lzz”,相应的age就是第二个属性,值对应是100,其中的arr是该数据的数组,数组中的内容不仅仅限于一种,可以多种多样。可以以此类推添加很多对应的数据。
新建一个Json数据的对象和获取对应对象中的值的方法:
JSONObject jo = new JSONObject(jsonlzz);//将对应的数据传入该对象中
//获取对象中的数据;
String name = jo.getString("name");
//获取对象中的数组;
JSONArra arr = jo.getJSONArray("arr");
int first = arr.getInt(0);//因为已知的第一个值是int类型,所以我们可以直接用getInt.
实例开发:PM的检测。
public class MainActivity extends Activity {
private TextView lzz;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lzz = (TextView) findViewById(R.id.textView1);
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
reloadData();
}
});
reloadData();//程序运行就自动检索
}
private void reloadData() {
// TODO Auto-generated method stub
lzz.setText("正在加载...");
new AsyncTask<Void,Void,String>(){//不能在主线程中访问网络数据
protected String doInBackground(Void... params){
try{
BufferedReader reader = new BufferedReader(new InputStreamReader(new URL("http://aqicn.org/publishingdata/json").openStream(),"utf-8"));//将我们需要访问的网页和bufferedreader对象联系起来
String line = null;
StringBuffer content = new StringBuffer();
while((line = reader.readLine())!=null){
content.append(line);//将每行获取的数据传给content;
}
reader.close();
return content.toString();//返回该字符串
}catch(IOException e){
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String s){
super.onPostExecute(s);
if(s!=null)
{
try {
JSONArray jsonArr = new JSONArray(s);//获取S字符串中的json数组
JSONObject firstJo = jsonArr.getJSONObject(0);//获取数组中第一个对象
JSONArray pollutants = firstJo.getJSONArray("pollutants");//获取第一个对象中的数组
JSONObject firstPollutant = pollutants.getJSONObject(0);//获取数组中第一个对象中数组的第一个数据
lzz.setText(String.format("%s %s: %f",firstJo.getString("cityName"),firstJo.getString("localName"),firstPollutant.getDouble("value")));//输出所获取到的数据
} catch (JSONException e) {
// TODO Auto-generated catch block
lzz.setText("失败");
e.printStackTrace();
}
}
}
}.execute();
}