Java 无法分析有效的JSON字符串

Java 无法分析有效的JSON字符串,java,php,android,json,arraylist,Java,Php,Android,Json,Arraylist,我试图解析一个JSON字符串并将其映射到hashmap,我从服务器获得了一个有效的JSONString,但当我遍历它时,我只能得到第一个结果 JSONArray peoples = null; ArrayList<HashMap<String, String>> personList = new ArrayList<HashMap<String,String>>(); JSONObject jsonObj = new JSONObject(v

我试图解析一个JSON字符串并将其映射到hashmap,我从服务器获得了一个有效的JSONString,但当我遍历它时,我只能得到第一个结果

 JSONArray peoples = null;
 ArrayList<HashMap<String, String>> personList = new ArrayList<HashMap<String,String>>();

JSONObject jsonObj = new JSONObject(value);
                Log.d("Jello",jsonObj.toString());
                peoples = jsonObj.getJSONArray("product");//check here
                Log.d("Jello",peoples.toString());


                for(int i=0;i<peoples.length();i++){
                    JSONObject c = peoples.getJSONObject(i);
                    String service_group = c.getString("sgroup");
                    String service = c.getString("service");
                    String value = c.getString("value");
                    String updated_at = c.getString("updated_at");

                    HashMap<String,String> persons = new HashMap<String,String>();

                    persons.put("service_group",service_group);
                    persons.put("service",service);
                    persons.put("value",value);
                    persons.put("updated_at",updated_at);


                    personList.add(persons);
                }

下面是我发送JSON的方式

while($row = mysql_fetch_assoc($output))
        {
            $product = array();
            $product["sgroup"] = $row["service_group"];
            $product["service"] = $row["service"];
            $product["code"] = $row["code"];
            $product["value"] = $row["amount"];
            $product["updated_at"] = $row["updated_at"];

            // user node
            $response["product"] = array();

            array_push($response["product"], $product);

            // echoing JSON response
            echo json_encode($response);
        }
我想在ArrayList中添加JSON中的所有数据,以便以后使用。
感谢您的帮助。

您应该将产品放入json数组:

[
  {
    "product": {
      "sgroup": "lkfnhjdiofho",
      "service": "dfjdifj",
      "code": "1101",
      "value": "0",
      "updated_at": "2015-12-05 01:15:49"
    }
  },
  {
    "product": {
      "sgroup": "Baal",
      "service": "Saal",
      "code": "1234",
      "value": "21",
      "updated_at": "2015-12-05 01:34:59"
    }
  },
  {
    "product": {
      "sgroup": "Inis",
      "service": "Mona",
      "code": "1234",
      "value": "1001",
      "updated_at": "2015-12-05 01:39:51"
    }
  },
  {
    "product": {
      "sgroup": "Medical Treatment Loan",
      "service": "Number of referral slip",
      "code": "128",
      "value": "0",
      "updated_at": "2015-12-05 01:50:42"
    }
  },
  {
    "product": {
      "sgroup": "Medical Treatment Loan",
      "service": "Number of referral slip",
      "code": "128",
      "value": "0",
      "updated_at": "2015-12-05 01:55:12"
    }
  },
  {
    "product": {
      "sgroup": "Medical Treatment Loan",
      "service": "Number of referral slip",
      "code": "128",
      "value": "1000",
      "updated_at": "2015-12-05 01:56:10"
    }
  }
]
您必须稍微更改一下解析器:

JSONArray jsonArray = new JSONArray(string);

    for(int i=0;i<jsonArray.length();i++){
        JSONObject c = jsonArray.getJSONObject(i).getJSONObject("product");
        String service_group = c.getString("sgroup");
        String service = c.getString("service");
        String value = c.getString("value");
        String updated_at = c.getString("updated_at");

        HashMap<String,String> persons = new HashMap<String,String>();

        persons.put("service_group",service_group);
        persons.put("service",service);
        persons.put("value",value);
        persons.put("updated_at",updated_at);


        personList.add(persons);
    }
首先,有一些方法可以确定JSON是否有效

下面是格式化JSON数据的更好方法的一般示例:

至于解析,使用HashMap不是最好的方法。创建
Person
POJO对象的列表

首先定义Person类:

class Person {
    public String group;
    public String service;
    public String value;
    public String updated;
    public Person(String g, String s, String v, String u) {
        group = g;
        service = s;
        value = v;
        updated = u;
    }
}
然后,解析相当简单:

    List<Person> personList = new ArrayList<>();
    JSONArray jsonArr;
    try {
        jsonArr = new JSONArray(response);
        for(int i=0;i<jsonArr.length();i++){
            JSONObject c = jsonArr.getJSONObject(i);
            String service_group = c.getString("sgroup");
            String service = c.getString("service");
            String value = c.getString("value");
            String updated_at = c.getString("updated_at");

            Person p = new Person(service_group, service, value, updated_at);

            personList.add(p);
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
List personList=new ArrayList();
杰索纳里·杰索纳里;
试一试{
jsonArr=新JSONArray(响应);

for(int i=0;i您的JSON无效。那么如何逐个发送所有JSON?我正在将它们全部添加到一个数组中。不要从循环内部调用
echo JSON\u encode()
,而是添加到一个大数组,然后
echo JSON\u encode()
循环后的完整数组。还要注意,您希望外部元素是JSONArray而不是JSONObject,因此需要相应地更改解析代码。@DanielNugent,您能给我一个提示吗?我在这里呆了很长时间。:/谢谢@Daniel。您是个救命恩人:)我们设法在适当的时候提交了我们的第一个项目:)
<?php 
    $bigArray = array();

    for ($x = 0; $x <= 10; $x++) {
            $product = array();
            $product["sgroup"] = $x;
            $product["service"] = $x;
            $product["code"] = $x;
            $product["value"] = $x;
            $product["updated_at"] = $x;

            array_push($bigArray, $product);
        }
      // echoing JSON response
      echo json_encode($bigArray);      
?>
[
   {
      "sgroup":0,
      "service":0,
      "code":0,
      "value":0,
      "updated_at":0
   },
   {
      "sgroup":1,
      "service":1,
      "code":1,
      "value":1,
      "updated_at":1
   },
   {
      "sgroup":2,
      "service":2,
      "code":2,
      "value":2,
      "updated_at":2
   },
   {
      "sgroup":3,
      "service":3,
      "code":3,
      "value":3,
      "updated_at":3
   },
   {
      "sgroup":4,
      "service":4,
      "code":4,
      "value":4,
      "updated_at":4
   },
   {
      "sgroup":5,
      "service":5,
      "code":5,
      "value":5,
      "updated_at":5
   },
   {
      "sgroup":6,
      "service":6,
      "code":6,
      "value":6,
      "updated_at":6
   },
   {
      "sgroup":7,
      "service":7,
      "code":7,
      "value":7,
      "updated_at":7
   },
   {
      "sgroup":8,
      "service":8,
      "code":8,
      "value":8,
      "updated_at":8
   },
   {
      "sgroup":9,
      "service":9,
      "code":9,
      "value":9,
      "updated_at":9
   },
   {
      "sgroup":10,
      "service":10,
      "code":10,
      "value":10,
      "updated_at":10
   }
]
class Person {
    public String group;
    public String service;
    public String value;
    public String updated;
    public Person(String g, String s, String v, String u) {
        group = g;
        service = s;
        value = v;
        updated = u;
    }
}
    List<Person> personList = new ArrayList<>();
    JSONArray jsonArr;
    try {
        jsonArr = new JSONArray(response);
        for(int i=0;i<jsonArr.length();i++){
            JSONObject c = jsonArr.getJSONObject(i);
            String service_group = c.getString("sgroup");
            String service = c.getString("service");
            String value = c.getString("value");
            String updated_at = c.getString("updated_at");

            Person p = new Person(service_group, service, value, updated_at);

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