【问题标题】:How to get multiple rows of JSON data and put it into some sort of Array?如何获取多行 JSON 数据并将其放入某种数组中?
【发布时间】:2012-06-04 03:08:07
【问题描述】:

我尝试检索多行 JSON 数据并显示它,但我无法检索所有行,我只获取数据库表的顶部(第一)行。我对如何放置检索到的 JSON 感到困惑将数据放入某种数组并访问各个行?

我已经提供了与问题相关的代码。 是的,在发布这个问题之前我已经做了足够的研究。我实际上发现了一个与我的问题相似但没有人回答的问题,所以我正在发布这篇文章。

谢谢

下面是我的 Freebies.java 类中的代码,我试图通过从 UserFunctions.java 类调用 getAllFreebies 函数来检索 JSONdata

UserFunctions uf = new UserFunctions();
JSONObject json = uf.getAllFreebies();
System.out.println(json);

下面是UserFunctions.java类中getAllFreebies()函数的代码

public JSONObject getAllFreebies(){
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("tag", getAllFreebies_tag));
    JSONObject json = jsonParser.getJSONFromUrl(getAllFreebiesURL,params);
    return json;
}

下面是 index.php 中的代码,我从 DB_Function.php 文件中调用 getFreebies() 函数

else if($tag = 'getAllFreebies'){
                    $getAllFreebies = $db->getFreebies($username,$catagory,$subcatagory,$title,$condition,$description,$address,$city,$state,$country,$zipcode,$posted_on);
                    if($getAllFreebies)
                    {
            $response["success"] = 1;
            $response["getAllFreebies"]["username"] = $getAllFreebies["username"];
            $response["getAllFreebies"]["catagory"] = $getAllFreebies["catagory"];
            $response["getAllFreebies"]["subcatagory"] = $getAllFreebies["subcatagory"];
            $response["getAllFreebies"]["title"] = $getAllFreebies["title"];
            $response["getAllFreebies"]["item_condition"] = $getAllFreebies["item_condition"];
            $response["getAllFreebies"]["description"] = $getAllFreebies["description"];
            $response["getAllFreebies"]["address"] = $getAllFreebies["address"];
            $response["getAllFreebies"]["city"] = $getAllFreebies["city"];
            $response["getAllFreebies"]["state"] = $getAllFreebies["state"];
            $response["getAllFreebies"]["country"] = $getAllFreebies["country"];
            $response["getAllFreebies"]["zipcode"] = $getAllFreebies["zipcode"];
            $response["getAllFreebies"]["posted_on"] = $getAllFreebies["posted_on"];
            echo json_encode($response);
                        }else {
                            $response["error"] =1;
            $response["error_msg"] = "Error in getAllFreebies";
            echo json_encode($response);

                            }
                    }// end of getAllFreebies tag

下面是我的 DB_function.php 的 getFreebies() 函数的代码,它负责对 MySQL 数据库执行查询。

public function getFreebies(){
$result = mysql_query("SELECT * FROM freebie") or die(mysql_error());
return mysql_fetch_array($result);
}

下面是logcat:

05-30 00:13:23.960: E/JSON(318): {"tag":"getAllFreebies","success":1,"error":0,"getAllFreebies":{"username":"viking","catagory":"Art","subcatagory":"Potrait","title":"Potrait","item_condition":"Good","description":"potarit","address":"Blah St","city":"lalaland","state":"NA","country":"NA","zipcode":"blah","posted_on":"2012-05-27"}}

【问题讨论】:

  • mysql_fetch_array 只返回一行。 mysql_fetch_assoc 应该返回您正在寻找的整个 (*) 结果集。
  • @misha'el:没有。 fetch_assoc 也只返回一行,就像一个关联数组而不是一个数字键。
  • 我的脑筋急转弯。 Marc B 提供的绝佳解决方案。
  • 感谢@Misha'el 和 Marc B 的回复!!

标签: java php android mysql json


【解决方案1】:

mysql_fetch_array() 只将查询结果集中的单行作为数组返回。它不会获取所有行。由于您从 getFreebies 方法返回获取的结果,而不是结果句柄本身,因此调用代码不可能从查询中获取任何其他结果,除了您获取的一行。

因此,您应该:

public function getFreebies() {
   $result = ...
   return($result);
}

$getAllFreebies = $db->getFreebies(...);
$data = array();
while($row = mysql_fetch_assoc($getAllFreebies)) {
   $data[] = array(
      .... your variable assignments here ...
   );
}
echo json_encod($data);

【讨论】:

  • 感谢您的回复。这似乎正在工作。现在它显示 JSON 数据的最后一行。你能告诉我我的 java 函数 getAllFreebies 应该是什么样子以便读取获得的数据数组而不是只有 1 行?谢谢。
  • 不知道。我不做java。对不起。
猜你喜欢
  • 2020-02-23
  • 2020-10-02
  • 1970-01-01
  • 2012-10-02
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
相关资源
最近更新 更多