0

嗨,我是 JSON 新手,我想检索下面的 json 值

{"error":"0","uid":"160","langId":"2","rank":"1"}

我写了一个 JSONParser 类,但主要的活动类让我卡住了。下面是代码

private static final String LOGTAG = "MyActivity";
    private static String JSONurl = "http://www.afroklore.org/mobile/boot.php?actn=post_prov&lang=1&uid=2&prov=";
    private static final String ERROR = "error";
    private static final String UID = "uid";
    private static final String LANGID = "langId";
    private static final String RANK = "rank";
    JSONArray output = null;
    String id, error, langId, rank;

if (MenuActivity.status == 2) {
            JSONParser jParser = new JSONParser();
            JSONObject json = jParser.getJSONFromUrl(JSONurl);

            try {
                output = json.getJSONArray(ERROR);

                for (int i = 0; i < output.length(); i++) {
                    JSONObject c = output.getJSONObject(i);

                    // Storing each json item in variable
                    id = c.getString(UID);
                    error = c.getString(ERROR);
                    langId = c.getString(LANGID);
                    rank = c.getString(RANK);
                    // creating new HashMap
                    /*
                    HashMap<String, String> map = new HashMap<String, String>();

                    // adding each child node to HashMap key => value
                    map.put(ERROR, error);
                    map.put(UID, id);
                    map.put(LANGID, langId);
                    map.put(RANK, rank);

                    // adding HashList to ArrayList
                    outputField.add(map);*/
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }
        return result;

protected void onPostExecute(String r) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            String msg = "Login successful";

            if (MenuActivity.status == 2) {
                Log.d(LOGTAG, result);
                // Log.d(LOGTAG, outputField.get(ERROR));
                Log.d(LOGTAG, error + " " + id + " " + langId + " " + rank);

}

4

3 回答 3

1

在此处检查您的 json webservice respose 。它仅包含一个 json 对象作为您提供的字符串

{"error":"0","uid":"160","langId":"2","rank":"1"}

所以将其解析为

JSONObject json = jParser.getJSONFromUrl(JSONurl);
     try {
         // Storing each json item in variable
         id = json.getString(UID);
         error = json.getString(ERROR);
         langId = json.getString(LANGID);
         rank = json.getString(RANK);
           //..your code here
于 2012-06-29T08:30:51.637 回答
1

您可以使用GSON解析 JSON 字符串

在您的情况下,创建一个代表 JSON 参数的类,如下所示

public class Header {
///{"error":"0","uid":"160","langId":"2","rank":"1"}

    private String error;
    private String uid;
    private String langId;
    private String rank;
    /**
     * Gets the error.
     * 
     * @return <tt> the error.</tt>
     */
    public String getError() {
        return error;
    }
    /**
     * Sets the error.
     *
     * @param error <tt> the error to set.</tt>
     */
    public void setError(String error) {
        this.error = error;
    }
    /**
     * Gets the uid.
     * 
     * @return <tt> the uid.</tt>
     */
    public String getUid() {
        return uid;
    }
    /**
     * Sets the uid.
     *
     * @param uid <tt> the uid to set.</tt>
     */
    public void setUid(String uid) {
        this.uid = uid;
    }
    /**
     * Gets the langId.
     * 
     * @return <tt> the langId.</tt>
     */
    public String getLangId() {
        return langId;
    }
    /**
     * Sets the langId.
     *
     * @param langId <tt> the langId to set.</tt>
     */
    public void setLangId(String langId) {
        this.langId = langId;
    }
    /**
     * Gets the rank.
     * 
     * @return <tt> the rank.</tt>
     */
    public String getRank() {
        return rank;
    }
    /**
     * Sets the rank.
     *
     * @param rank <tt> the rank to set.</tt>
     */
    public void setRank(String rank) {
        this.rank = rank;
    }
    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Header [error=" + error + ", uid=" + uid + ", langId=" + langId
                + ", rank=" + rank + "]";
    }




}

现在只用两行解析所需的 JSON 字符串

String jSonData = "{\"error\":\"0\",\"uid\":\"160\",\"langId\":\"2\",\"rank\":\"1\"}";
Header header = new Gson().fromJson(jSonData, Header.class);
System.out.println("Header : "+header);

您需要 gson jar 二进制文件才能运行此代码。

  • 下载GSON JAR
  • 在项目文件夹中创建一个名为“libs”的资源文件夹
  • 将 gson jar 复制到此文件夹并添加到构建路径
  • 现在你可以走了
于 2012-06-29T09:15:39.223 回答
0

{ , }是代表JSONobject[ ,]是代表JSONArray

{"error":"0","uid":"160","langId":"2","rank":"1"}

您不能将 for 循环用于JSONobject,它用于JSONArray.

你可以检查这个链接

这里的问题是不同的,但在该解决方案中使用 JSON。

如需更多了解,请查看此链接。我希望它对你有帮助。

于 2012-06-29T09:38:45.377 回答