解析json数组android

Posted

技术标签:

【中文标题】解析json数组android【英文标题】:Parse json array android 【发布时间】:2013-01-11 18:30:01 【问题描述】:

您好,我正在尝试从 this url 解析 json 数组。 json数组长这样。

    [
   
      "id":1,
      "introtext":"\u041b\u0438\u043c\u0443\u0437\u0438\u043d\u0430\u0442\u0430 \u0435 \u043e\u0434 \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0432\u043e \u0431\u0435\u043b\u0430 \u0431\u043e\u0458\u0430 \u0434\u043e\u043b\u0433\u0430 \u043e\u043a\u043e\u043b\u0443 8,5 \u043c\u0435\u0442\u0440\u0438. \u041e\u043f\u0440\u0435\u043c\u0435\u043d\u0430 \u0435 \u0441\u043e \u043a\u043b\u0438\u043c\u0430 \u0440\u0435\u0434, \u0422\u0412, \u0414\u0412\u0414 \u0438 \u0431\u0430\u0440. \u041c\u043e\u0436\u0430\u0442 \u0434\u0430 \u0441\u0435 \u0432\u043e\u0437\u0430\u0442 \u0434\u043e 9 \u043b\u0438\u0446\u0430. \u0421\u0435 \u0438\u0437\u043d\u0430\u0458\u043c\u0443\u0432\u0430 \u0441\u043e \u043d\u0430\u0448 \u0448\u043e\u0444\u0435\u0440.\nAdmirorGallery..\/katalog\/prevoz\/limo-servis-jasmina\/linkoln\/\/AdmirorGallery\n\u00a0",
      "image":"http:\/\/zasvadba.mk\/media\/k2\/items\/cache\/787ae9ec9023a82f5aa7e4c1a64f73cb_S.jpg",
      "title":"\u041b\u0438\u043c\u0443\u0437\u0438\u043d\u0430 \u041b\u0438\u043d\u043a\u043e\u043b\u043d",
      "catid":"20",
      "alias":"\u043b\u0438\u043c\u0443\u0437\u0438\u043d\u0430-\u043b\u0438\u043d\u043a\u043e\u043b\u043d-\u043b\u0438\u043c\u043e-\u0441\u0435\u0440\u0432\u0438\u0441-\u0458\u0430\u0441\u043c\u0438\u043d\u0430"
   
]

我在我的 java 类中这样做

try 
            JSONfunctions j=new JSONfunctions();
            JSONObject json = j.getJSONfromURL(url);
            Log.i("log_tag", json.toString()); 
            String jsonvalues =  json.getString("id");

            Log.i("DARE", jsonvalues);  
        
        catch (Exception ex)
        
            Log.e("log_tag", "Error getJSONfromURL "+ex.toString());           
        
    

但是不行,谁能帮我解析一下我的json数组

【问题讨论】:

it doesn't work 把这三个词详细说明会有所帮助 @Abu 表示不返回任何预期结果 你可以把你得到的结果和你期望的结果,然后这将有助于理解问题 @BozidarPrcovski : 问题解决了吗? @BozidarPrcovski :查看我的答案并更改您当前的代码 【参考方案1】:

您需要根据您在此处发布的字符串对当前代码进行两次更改以解析为 Json:

首先:getJSONfromURL方法的返回类型改为JSONArray,并从中返回JSONArray而不是JSONObject 例如:

public JSONArray getJSONfromURL(String url)
    String str_response="response from server";

    // convert response to JSONArray
   JSONArray json_Array=new JSONArray(str_response);

   return json_Array; //<< retun jsonArray

第二:更改代码以从JsonArray获取价值:

try 
    JSONfunctions j=new JSONfunctions();
    JSONArray jArray = j.getJSONfromURL(url);
    Log.i("log_tag", jArray.toString()); 

     for(int i=0;i<jArray.length();i++)
      JSONObject json_data = jArray.getJSONObject(i);
      String jsonvalues =  json_data.getString("id");
      // .. get all value here
      Log.i("DARE", jsonvalues);  
   
  
catch (Exception ex)
   
    Log.e("log_tag", "Error getJSONfromURL "+ex.toString());           
  

【讨论】:

它在 logcat 01-28 13:03:57.329 中给了我这个:E/log_tag(1708):http 连接出错 java.lang.IllegalStateException:目标主机不能为空,或设置为参数。 scheme=null, host=null, path=www.zasvadba.mk/test.php 01-28 13:03:57.379: E/log_tag(1708): 错误转换结果 java.lang.NullPointerException: lock == null 01- 28 13:03:57.379: E/log_tag(1708): 解析数据时出错 org.json.JSONException: 输入结束于 01-28 的字符 0 13:03:57.379: E/log_tag(1708): 错误 getJSONfromURL java。 lang.NullPointerException @BozidarPrcovski :检查您在 getJSONfromURL 中传递的 URl 是否为 getJSONfromURL("http://www.zasvadba.mk/test.php") 是的,这就是解决方案,谢谢!【参考方案2】:

当然不行!您应该使用json.getJSONArray(...) 方法来解析 Json 中的数组:)

【讨论】:

json.getJSONArray(name) -> 我应该在名称中输入什么值? 不需要名字。你的字符串是一个 JSONArray 所以只需通过将字符串传递给 JSONArray 的构造函数来初始化对象 @OsamaRao 他正在处理 url【参考方案3】:

您可以使用 gson 库轻松完成。

这是代码示例:

您的实体类会喜欢:

public class ResponseEntity 
    @SerializedName("id")
    public int id;
    @SerializedName("introtext")
    public String introtext;
    @SerializedName("image")
    public String image;
    @SerializedName("title")
    public String title;
    @SerializedName("catid")
    public String catid;
    @SerializedName("alias")
    public String alias;


现在使用 GSON 库转换这个 json 数组。

Gson gson=new Gson();    
    ResponseEntity[] entities = gson.fromJson(yourResponseAsString.toString(),
          ResponseEntity[].class);

现在您的实体数组位于entities

谢谢。

【讨论】:

以上是关于解析json数组android的主要内容,如果未能解决你的问题,请参考以下文章

android怎么把json转换为hashmap

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

cjson数组如何解析

如何使用php解析json数组并显示?

gson怎么解析数组和空数组?

Android 解析json问题