0

我希望从我的网站 JSON url 中提取数据并在 textview 中仅显示一个对象。我能够解析整个 JSON 数组,但不能解析特定对象。

这是网站上的 JSON:

{"id":3,"day":"一个 A","created_at":"2013-11-06T12:30:59.023Z","updated_at":"2013-11-06T12:30:59.023Z"}

正如你所看到的,这很简单,但基本上我想要拉的是

“天”:“一个A”

并在我的文本视图中显示为“A”。到目前为止,我只能拉出整个数组。

对此或任何解决方案的参考将不胜感激!

提前致谢!

MainActivity 类:

公共类 MainActivity 扩展 Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.parseDay);
    TextView textView1 = null;

    try {
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try{
        JSONObject json=new JSONObject("day");
        try {
        String day =json.getString("day");
        textView1.setText(day);
        } catch (JSONException e) {
        e.printStackTrace();
        }

    }
    //catch (JSONException e) {
         // e.printStackTrace();
        //} 
    catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

和我的GetMethod:

公共类 GetMethod {

public String getInternetData() throws Exception {
    BufferedReader in = null;
    String data = null;
    try { 
        HttpClient client = new DefaultHttpClient();
        URI website = new URI("http://www.xelatechnologies.com/hfdays/show.json");

        HttpGet request = new HttpGet();
        request.setURI(website);
        HttpResponse response = client.execute(request);
        in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String l = "";
        String nl = System.getProperty("line.separator");
        while ((l = in.readLine()) !=null) {
            sb.append(l + nl);
        }

        in.close();
        data = sb.toString();
        return data;
    }
    finally { 
        if (in !=null){
            try{
                in.close();
                return data;
            }catch (Exception e){
                e.printStackTrace();

            }
        }

    }
}

我对 JSON 解析非常陌生,所以我确信它根本不对。但值得一试!

4

2 回答 2

0
{"id":3,"day":" an A","created_at":"2013-11-06T12:30:59.023Z","updated_at":"2013-11-06T12:30:59.023Z"}

因为它从'{'开始所以它Object不是Array

JSONObject json=new JSONObject("YOUR_JSON_STRING");
try {
String days=json.getString("day");
textview.setText(days);
} catch (JSONException e) {
e.printStackTrace();
}

编辑:

TextView textView1;
String response;
@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.parseDay);
    textView1 = (TextView)findViewById(R.id.your_textview_id);//First Initialise TextView
    GetMethod method=new GetMethod();
    response=method. getInternetData();// Then get the Json response

    try{
        JSONObject json=new JSONObject(response);
        try {
        String day =json.getString("day");
        textView1.setText(day);
        } catch (JSONException e) {
        e.printStackTrace();
        }

    }
    catch (JSONException e) {
          e.printStackTrace();
        } 
    catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

并且不要忘记在 Manifest 文件中添加 Internet 权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

像这样试试。

于 2013-11-08T01:45:50.700 回答
0

您发布的 JSON 是 JSONObject。在 java 中,您可以像这样将该对象放入 JSONObject 中(您可以使用任何您想要的序列化/反序列化器,很多存在,对于这个示例,请尝试 org.json):

String json = "{\"id\":3,\"day\":\" an A\",\"created_at\":\"2013-11-06T12:30:59.023Z\",\"updated_at\":\"2013-11-06T12:30:59.023Z\"}";
JSONObject jsonObject = new JSONObject(json);

现在您已经创建了一个 json 对象。接下来,您要在文本视图上设置文本。在这种情况下,获得价值的关键是“天”。所以现在你要做的就是在 json 对象上使用提供的 getString(String value) 方法。

final String DAY = "day";
String dayValue= "";
try {
    value = jsonObject.getString(DAY);
} catch (JSONException e) {
    e.printStackTrace();
}
TextView textView = findViewById(R.id.text_view);
textView.setText(dayValue);
于 2013-11-08T02:01:05.053 回答