解析Json字符串Android时出错

时间:2014-05-21 12:15:05

标签: android json android-json

我正在进行Json解析

这是我的java代码

    if(jsonstr!=null){
    try{
        JSONObject   jsonResponse = new JSONObject(jsonstr);

      /***** Returns the value mapped by name if it exists and is a JSONArray. ***/
      /*******  Returns null otherwise.  *******/
      JSONArray jsonproduct = jsonResponse.optJSONArray("products");

      /*********** Process each JSON Node ************/

      int lengthJsonArr = jsonproduct.length();  
      for (int i = 0; i < lengthJsonArr; i++) {
          JSONObject c = jsonproduct.getJSONObject(i);
          itemcode.add(c.get("Code").toString());
          item.add(c.get("Name").toString());
          quantity.add("");
          category.add("CategoryCode");


      }

错误是

org.json.JSONException:Value [{“categories”:[{...................... all json}]

我的json喜欢

  

[{categories {[“a”:“s”“b”:“g”       },               {“a”:“s”“b”:“g”        }       ]},

     

产品{[“a”:“s”“b”:“g”       },               {“a”:“s”“b”:“g”        }       ]}]

MY Json网络服务网址 [web服务] [1]

请帮帮我如何解决此问题 在此先感谢

7 个答案:

答案 0 :(得分:1)

试试:

products替换为categories

try{
    JSONObject   jsonResponse = new JSONObject(jsonstr);

  /***** Returns the value mapped by name if it exists and is a JSONArray. ***/
  /*******  Returns null otherwise.  *******/
  JSONArray jsonproduct = jsonResponse.optJSONArray("categories");

  /*********** Process each JSON Node ************/

  int lengthJsonArr = jsonproduct.length();  
  for (int i = 0; i < lengthJsonArr; i++) {
      JSONObject c = jsonproduct.getJSONObject(i);
      itemcode.add(c.get("Code").toString());
      item.add(c.get("Name").toString());
      quantity.add("");
      category.add("CategoryCode");


  }

答案 1 :(得分:0)

您的JSON无效。

您可以使用在线工具进行检查:http://json.parser.online.fr/

JSON语法的链接:http://www.w3schools.com/json/json_syntax.asp

修改 好的,现在我们有了真正的JSON,它是正确的。

如何用JSONObject替换JSONArray。因为您的JSON Array

答案 2 :(得分:0)

您的JSON无效。

也许你会选择这样的东西?

{
    "categories": [
        {
            "a": "s",
            "b": "g"
        },
        {
            "a": "s",
            "b": "g"
        }
    ],
    "product": [
        {
            "a": "s",
            "b": "g"
        },
        {
            "a": "s",
            "b": "g"
        }
    ]
}

答案 3 :(得分:0)

试试这个,

if(jsonstr!=null){
    try{
        JSONArray   jsonResponse = new JSONArray(jsonstr);

 JSONObject   jsonResponse = jsonResponse.get(0);


      /***** Returns the value mapped by name if it exists and is a JSONArray. ***/
      /*******  Returns null otherwise.  *******/
      JSONArray jsonproduct = jsonResponse.getJSONArray("products");

      /*********** Process each JSON Node ************/

      int lengthJsonArr = jsonproduct.length();  
      for (int i = 0; i < lengthJsonArr; i++) {
          JSONObject c = jsonproduct.getJSONObject(i);
          itemcode.add(c.get("Code").toString());
          item.add(c.get("Name").toString());
          quantity.add("");
          category.add("CategoryCode");


      }

答案 4 :(得分:0)

因为您使用的json无效。 你正在进行的解析也无效

这是一个很好的链接,开始使用android json解析

http://www.androidhive.info/2012/01/android-json-parsing-tutorial/

答案 5 :(得分:0)

这种情况发生的原因是你的json是从jsonArray开始的,那你为什么选择jsonObject

[
    {
        "categories": [
            {
                "Code": "1001",
                "Name": "ROOM LINEN",
                "ShortName": "ROLN",
                "DivisionCode": "10",
                "SequenceNo": "3"

你应该尝试@akash moradiya的代码,他指的是正确的方式。

答案 6 :(得分:0)

试试这个..

  JSONArray jsonarray = new JSONArray(jsonstr);

  JSONObject jsonResponse = jsonarray.getJSONObject(1);
  JSONArray jsonproduct = jsonResponse.getJSONArray("products");

  for (int i = 0; i < jsonproduct.length(); i++) {
      JSONObject c = jsonproduct.getJSONObject(i);
      itemcode.add(c.getString("Code"));
      item.add(c.getString("Name"));
      quantity.add("");
      category.add("CategoryCode");
  }