2016-05-01 14 views
0

URLにデータがあります。サーバースクリプトがあります:http get requestから "Malformed JSON"

$db = null; 
$results = "{}"; 

require_once("connect.php"); 

/* Query */ 
if($db != null) { 
    $stmt = $db->prepare("SELECT category, category_color FROM categories ORDER BY category"); 
    $stmt->execute(); 
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC); 
} 

/* Close db connection */ 
$db = null; 

echo json_encode($results); 

Soooo ..私はAndroid Appでこれらのデータを取得します。

[{"category":"Animals","category_color":"green"}, 
{"category":"Art","category_color":"orange"}, 
{"category":"Sport","category_color":"blue"}, 
{"category":"Video games","category_color":"red"}] 

そして、私のアプリのコードがあります、私の件のデータを取得するために(これは私の最初のアプリですので、インターネット上で見つかったいくつかのコードが私を助けた):これは私のアプリは、スクリプトから得るものです

@Override 
protected String doInBackground(String... urls) { 
    String url = urls[0]; 
    String parsedString; 
    HttpURLConnection c = null; 
    try { 
     URL u = new URL(url); 
     c = (HttpURLConnection) u.openConnection(); 
     c.setRequestMethod("GET"); 
     c.setRequestProperty("Content-type", "application/json"); 
     c.setRequestProperty("Content-length", "0"); 
     c.setUseCaches(false); 
     c.setAllowUserInteraction(false); 
     c.setConnectTimeout(this.timeout); 
     c.setReadTimeout(this.timeout); 
     c.connect(); 
     int status = c.getResponseCode(); 

     switch (status) { 
      case 200: 
      case 201: 
       //Do stuff to parse my JSON to an HashMap 
     } 

    } catch(IOException ex) { 
     Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     if (c != null) { 
      try { 
       c.disconnect(); 
      } catch (Exception ex) { 
       Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    } 
    return null; 
} 

私は、スタック上の各応答のために、この結果毎回見つけ

  StringBuilder sb = new StringBuilder(); 
     String line; 

     try { 
      BufferedReader r1 = new BufferedReader(new InputStreamReader(c, "UTF-8")); 
      while ((line = r1.readLine()) != null) { 
       sb.append(line).append("\n"); 
      } 
     } finally { 
      is.close(); 
     } 
     return sb.toString(); 

:私はこのような(各要素の[カテゴリ、category_color])のHashMapに論文件のデータを解析するために多くのものを試してみました。私はこのコードをしようとしたとき、私のコンソールが印刷されています。しかし:E/JSONタスク:Coundが不正な形式のJSON私がやろう解析できません: "JSONObject JSON =新しいJSONObject(結果を);

ので、そこにあります私の最後の質問:?。

何私のPHPスクリプトから取得する簡単なリンクが役に立つことができますが、現時点では、私は、クリーンな作業答えを見つけることができませんJSONからHashMapを取得するための最良の方法です

+0

あなたが投稿した文字列は、jsonarjectではなくjsonarrayです。 – Blackbelt

+0

ああ神様、私はばか気分、私は違いを知らなかった。どのように私はそれを解析することができますか? –

答えて

0
PHPスクリプトからデータを取得する

最良の方法は、アレイ

{ 
    "result": [ 
    { 
     "category": "Animals", 
     "category_color": "green" 
    }, 
    { 
     "category": "Art", 
     "category_color": "orange" 
    } 
    ] 
} 

を作成することであるあなたは、コード

JSONObject jsonObject = new JSONObject(response); // here response is what you get from php script which is shown at top 
JSONArray message = jsonObject.getJSONArray("result"); 

for (int i = 0; i < message.length(); i++) { 
        Model model = new Model(); 
        JSONObject temp = message.getJSONObject(i); 
        String category = temp.getString("category"); 
        String category_color = temp.getString("category_color"); 


// create array or harshmap to store all data 

} 
に従うことによって、スクリプトを

$return_arr = array(); 

$fetch = mysql_query("SELECT category, category_color FROM categories ORDER BY category"); 

while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) { 
    $row_array['category'] = $row[0]; 
    $row_array['category_color'] = $row[1]; 


    array_push($return_arr,$row_array); 
} 

echo json_encode($return_arr); 

praseデータを、以下のことにより、上記の形式でデータを取得することができます

0

使用する必要があります

JSONArray json = new JSONArray(result); 

受信したデータがJSONオブジェクトではなくJSONArrayであるためです。

0

JSON解析ツールGsonまたはJacksonが時間を節約しよう