簡體   English   中英

如何從Android中的JSON中獲取數據而沒有鍵值對?

[英]How to collect data from JSON in android WITHOUT key value pair?

我試圖在android中以JSON的形式從服務器收集數據。 但是有一些技術故障,因為我必須解析不是key:value對形式的JSON數據。 或如何解析在JSON中創建的用戶創建的關聯數組? 需要幫忙? 預先感謝您。

編輯


我想解析以下兩種情況之一中收到的JSON對象。

情況1:

PHP腳本如下:

<?php
session_start();

$arraygive = $_SESSION['arraygive'];

$con=mysql_connect("localhost","root","");
mysql_select_db("rrugd");

$output = array();
$output1 = array();

foreach ($arraygive as $lid)
{
    echo "<br>";echo "new pass";echo "<br>";
    $query = "SELECT * FROM places WHERE(LID = '$lid');";
    $result = mysql_query($query) or die(mysql_error());
    $output = mysql_fetch_row($result);
    array_push($output1, $output);
}

print(json_encode($output1));

?>

它創建以下格式的JSON對象:

[["1","shopknock","0","0","22","18.5123","73.8563"],["2","Food Shopei","231","1","17","18.5122","73.8562"],["10","Ccd","0","0","22","18.5211","73.857"]]

我根本不知道如何在Android中解析此格式。

情況2:

PHP腳本如下:

<?php
session_start();

$arraygive = $_SESSION['arraygive'];

$con=mysql_connect("localhost","root","");
mysql_select_db("rrugd");

$output = array();
$output1 = array();

foreach ($arraygive as $lid)
{
    echo "<br>";echo "new pass";echo "<br>";
    $query = "SELECT * FROM places WHERE(LID = '$lid');";
    $result = mysql_query($query) or die(mysql_error());
    $output = mysql_fetch_assoc($result);
    array_push($output1, $output);
}

print(json_encode($output1));

?>

它創建以下格式的JSON對象:

[{"lid":"1","name":"shopknock","rid":"0","cid":"0","ccnt":"22","locx":"18.5123","locy":"73.8563"},{"lid":"2","name":"Food Shopei","rid":"231","cid":"1","ccnt":"17","locx":"18.5122","locy":"73.8562"},{"lid":"10","name":"Ccd","rid":"0","cid":"0","ccnt":"22","locx":"18.5211","locy":"73.857"}]

請注意,Case1和Case 2 PHP腳本之間的唯一區別是 mysql_fetch_row mysql_fetch_assoc


我無法使用我使用的代碼(在情況3下給出)解析此JSON對象,盡管它可以與情況3一起使用。

情況3: BUT每當從下面的另一個PHP腳本創建這種格式的JSON對象(情況2)時:

<?php
//used for populating list of catagories at different instances
$con=mysql_connect("localhost","root","");
mysql_select_db("rrugd");

$query = "SELECT * FROM places ORDER BY ccnt DESC;";
$result=mysql_query($query) or die(mysql_error());

$output=array();
while($row=mysql_fetch_assoc($result))
{
    $output[]=$row; 
}


print(json_encode($output));

?>

JSON對象有效(從上述腳本創建時,但與案例2中給出的對象相同)

在案例3中,我用來解析JSON對象的Android代碼如下:

JSONArray jsonArray = new JSONArray(result);
int length = jsonArray.length();
for (int i = 0; i < length; i++)
 {
            JSONObject jObj = jsonArray.getJSONObject(i);
    String name = jObj.getString(TAG_NAME);
    String rid = jObj.getString(TAG_RID);

    HashMap<String, String> map = new HashMap<String, String>();
    map.put(TAG_RID, rid);
    map.put(TAG_NAME, name);

    oslist.add(map);

     ListAdapter adapter = new SimpleAdapter(User_Home_List_Activity.this, oslist,
    R.layout.list_v, new String[] { TAG_NAME }, new int[] { R.id.name});
    l1.setAdapter(adapter);

}

編輯


我嘗試使用Toasts進行調試,但我意識到在上面的代碼(在Try塊中)中,控件本身未到達第一行。

JSONArray jsonArray = new JSONArray(result);

如果我在上面這一行之前的Try塊內應用Toast,則顯示它(即,控制到達該行)。 但是,此行之后的Toast不會顯示。

像這樣嘗試

for (int i = 0; i < mJsonArray.length(); i++) {

    JSONObject mJsonObject = new JSONObject();
    mJsonObject = mJsonArray.getJSONObject(i);

    for (int j = 0; j < mJsonObject .length(); j++) {

     int Id = mJsonObject.getString("lid");
     String Name = mJsonObject.getString("name");
     .
     .
     .
   }
}

我已經嘗試過使用您的Json響應和Wola及其工作方式。 這是可用於將Case 2 JSON輸出與該Json字符串一起解析的代碼段

    StringBuilder output = new StringBuilder();
    JSONArray jArr;
    try
    {
        jArr = new JSONArray(jString);

        for (int i = 0; i < jArr.length(); i++)
        {
            JSONObject jObj = jArr.getJSONObject(i);
            output.append("\n\n");
            output.append("\n lid : " + jObj.getInt("lid"));
            output.append("\n name : " + jObj.getString("name"));
            output.append("\n rid : " + jObj.getInt("rid"));
            output.append("\n cid : " + jObj.getInt("cid"));
            output.append("\n ccnt : " + jObj.getInt("ccnt"));
            output.append("\n locx : " + jObj.getDouble("locx"));
            output.append("\n locy : " + jObj.getDouble("locy"));
        }
    }
    catch (JSONException e1)
    {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    tvText.setText(output.toString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM