首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有键值对的情况下从android中的JSON收集数据?

如何在没有键值对的情况下从android中的JSON收集数据?
EN

Stack Overflow用户
提问于 2014-03-12 09:25:26
回答 2查看 841关注 0票数 1

我试图以android中JSON的形式从服务器收集数据。但是有一些技术故障,因为我必须解析JSON数据,它不是key:value对的形式。或者如何解析在JSON中创建的用户创建的关联数组?需要帮助吗?提前感谢你。

编辑

我希望解析在以下两种情况中任何一种情况下收到的JSON对象。

案例1:

PHP脚本如下:

代码语言:javascript
复制
<?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对象:

代码语言:javascript
复制
[["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脚本如下:

代码语言:javascript
复制
<?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对象:

代码语言:javascript
复制
[{"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"}]

请注意,mysql_fetch_rowmysql_fetch_assoc是Case1与Case 2脚本的唯一区别。

我无法用我使用的代码解析这个JSON对象(给出在下面的案例3),尽管它与案例3一起工作。

案例3:,但每当从下面的另一个PHP脚本创建上述格式的JSON对象(案例2)时:

代码语言:javascript
复制
<?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代码如下所示:

代码语言:javascript
复制
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);

}

编辑

我尝试使用Toast进行调试,并意识到在上面的代码中(在Try块中),控件没有到达第一行本身。即

代码语言:javascript
复制
JSONArray jsonArray = new JSONArray(result);

如果我在上述行之前的Try块中应用了一个Toast,那么它就会显示出来(i.e.control到达该行)。但是上面这一行之后的烤面包没有显示出来。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-15 06:39:36

我试过你的Json回复,而Wola它的工作。这是您可以用Case 2的Json输出解析这个JSON字符串的代码片段

代码语言:javascript
复制
    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());
票数 0
EN

Stack Overflow用户

发布于 2014-03-12 10:58:36

试着像这样

代码语言:javascript
复制
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");
     .
     .
     .
   }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22347004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档