我无法从JSON读取数据

时间:2013-05-16 11:06:03

标签: java php json

我像这样制作一个json:

  

[ “\” latitud \ “:\” 123.0 \ “\ ”奥登\“:\ ”0 \“,\ ”longitud \“:\ ”123.0 \“,\ ”urlfoto \“:\” 一\ “\ ”idruta \“:\ ”45 \“}”, “{\” latitud \ “:\” 321.0 \”,\ “奥登\”:\ “1 \” \ “longitud \”:\ “321.0 \”,\ “urlfoto \”:\ “b \”,\ “idruta \”:\ “45 \”} “ ”{\“ latitud \ ”:\“ 231.0 \”,\ “奥登\” :\ “2 \” \ “longitud \”:\ “231.0 \”,\ “urlfoto \”:\ “C:\”,\ “idruta \”:\ “45 \”}“]

我在这里搜索并尝试过:

$puntos = $_POST['puntos'];
$data = json_decode($puntos,true);

foreach($data as $obj) {
        $idruta = $obj['idruta'];
        $orden = $obj['orden'];
        $urlfoto = $obj['urlfoto'];
        $longitud = $obj['longitud'];
        $latitud = $obj['latitud'];
    }

非法字符串偏移'idruta'


foreach($data as $obj) {
         $idruta = $obj->idruta;
         $orden = $obj->orden;
         $urlfoto = $obj->urlfoto;
         $longitud = $obj->longitud;
         $latitud = $obj->latitud;
     }

尝试获取非对象的属性


foreach($data as $obj) {
        $idruta = $obj[0];
        $orden = $obj[1];
        $urlfoto = $obj[2];
        $longitud = $obj[3];
        $latitud = $obj[4];
    }

obj [i]始终为0且没有错误。

循环执行3次,这样就可以了。

抱歉,我只是在学习JSON和php,如果有人能帮助我获取JSON的数据,我将非常高兴。

谢谢!

编辑:感谢您的回答! 我不知道为什么缺少“{”,当我在JSONlint中粘贴相同的json时,例如它的验证很好......所以我有点失意了。

这就是我发送json的方式:

public void insertPoints(ArrayList<Punto> puntos){
        JSONArray array = new JSONArray();
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        for(Punto p:puntos){
            JSONObject obj = new JSONObject();
            try {
            obj.put("idruta",Integer.toString(p.getIdruta()));
            obj.put("orden",Integer.toString(p.getOrden()));
            obj.put("urlfoto",p.getUrlfoto());
            obj.put("longitud",Double.toString(p.getLongitud()));
            obj.put("latitud",Double.toString(p.getLongitud()));
            array.put(obj.toString());
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        HttpClient httpClient = new DefaultHttpClient();

        try {
            HttpPost request = new HttpPost(CREATE_POINT);
            StringEntity params =new StringEntity("puntos=" + postjson);
            request.addHeader("content-type", "application/x-www-form-urlencoded");
            request.setEntity(params);
            HttpResponse response = httpClient.execute(request);
            // handle response here...

        } catch (Exception ex) {
            // handle exception here
        } finally {
            httpClient.getConnectionManager().shutdown();
        }
        }

这有什么问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

首先,JSON的第一行缺少{

试试这个:

$data = json_decode($puntos,true);

而不是:

$data = json_decode($puntos);

它应该有用!

答案 1 :(得分:0)

您的JSON代表字符串的数组。所有{}都在"..."内,并被解释为字符串的一部分。因此,如果没有进一步解析,则无法访问'idruta'和其他字段,因为它们都在单个字符串中。如果可以,您应该更改JSON代码。

您的问题是由array.put(obj.toString());引起的。你不应该这样做。另外,我认为您应该从Integer.toString和类似的行中删除obj.put("idruta",Integer.toString(p.getIdruta()));。请参阅this question