当前位置: 首页 > 知识库问答 >
问题:

使用PHP在Android中引用两个或多个JSON表

郤飞英
2023-03-14

我目前有一个php脚本,它从两个表返回一个JSON编码的计数(*):

// array for JSON response
$response = array();

// include db connect class
require_once 'db_connect.php';

// connecting to db
$db = new DB_CONNECT();

// get all ratings from different tables
$result = mysql_query("SELECT COUNT(*) AS data1 FROM table1") or die(mysql_error());

// check for empty result
if (mysql_num_rows($result) > 0) {
// looping through all ratings
// ratings node
$response["ratings"] = array();

while ($row = mysql_fetch_array($result)) {
    // temp user array
    $rating = array();
    $rating["data1"] = $row["data1"];

    // push single rating into final response array
    array_push($response["ratings"], $rating);
}

$result = mysql_query("SELECT COUNT(*) AS data2 FROM table2") or die(mysql_error());

while ($row = mysql_fetch_array($result)) {
    // temp user array
    $rating = array();
    $rating["data2"] = $row["data2"];

    // push single rating into final response array
    array_push($response["ratings"], $rating);
}


// echoing JSON response
echo json_encode($response);

}

我在线接收JSON输出:

{"ratings":[{"data1":"3"},{"data2":"4"}]}

并且可以通过以下方式确认没有问题:http://jsonlint.com/

我目前能够引用来自data1的第一条数据,但是我得到了data2的错误消息:

Error parsing data org.json.JSONException: No value for data2

以下是我的JSON代码:

        protected void onPostExecute(Void v) {

        // ambil data dari Json database
        try {
            JSONObject jsonObject = new JSONObject(result);
            JSONArray jResult = jsonObject.getJSONArray("ratings");

            for(int i=0;i<jResult.length();i++){
                JSONObject object = jResult.getJSONObject(i);
                text_1 = (TextView)findViewById(R.id.txt1);
                text_2 = (TextView)findViewById(R.id.txt2);

                //get an output on the screen
                int count1 = object.getInt("data1");
                text_1.append(count1+"\t\t"+"\n");
                int count2 = object.getInt("data2");
                text_2.append(count2+"\t\t"+"\n");


            }
            this.progressDialog.dismiss();

        } catch (Exception e) {
            // TODO: handle exception
            Log.e("log_tag", "Error parsing data "+e.toString());
        }
    }

我知道我在编码方面效率不高,所以如果有人对如何简化它有任何建议,我将不胜感激。

另外,我是学习书籍的爱好者,但找不到任何教Android、JSON的书籍

共有2个答案

张丰
2023-03-14

在您的SQL查询中,只需添加

计数(*)AS table1data

计数(*)AS table2data

这样,您至少可以单独访问它们。其次,我不确定您得到的输出是否是有效的json。刚刚在JSONLint上尝试了这个,它说它无效。试着把这个东西也修好。如果你需要更多的帮助,请告诉我。

罗兴运
2023-03-14

出现异常的原因是数组中有两个json对象,每个对象都有1个数据(data1或data2,不是两个都有)。因此,当您请求不带data2的对象时,它找不到它。可能的解决方案(取决于你真正在寻找什么):

1) 使用optInt获取值。这样它就不会对丢失的数据抛出异常。

2) 确保服务器在单个对象中推送这两个值,而不是在一个对象数组中推送。

 类似资料:
  • 问题内容: 我有两个json 第一个是 第二个是 我想合并它们并有一个像 有没有办法合并它们?如果需要在JSON中更改结构,对我来说也可以 谢谢。 问题答案: 像应该工作。 官方PHP文档中的 array_merge 官方PHP文档中的 json_decode 编辑: 尝试将第二个参数添加到json_decode。这样会将对象转换为关联数组。

  • 问题内容: 我想将某些对象存储在HashMap中。问题是,通常您只使用一个对象作为键。(例如,您可以使用字符串。)要使用多个对象,我想这样做。例如,一个类和一个字符串。有没有简单干净的方法来实现这一目标? 问题答案: 您的密钥必须实现hashCode和equals。如果它是 SortedMap ,则还必须实现Comparable接口

  • 我们目前正在使用Windows\Jenkins 2.107.1(无管道),我正在研究管道。我们有一个夜间构建作业,它从存储库中获取、提交和等待其他作业。我看到9个作业同时在同一主节点上运行(我们只有一个主节点)。我不清楚我们应该有一个Jenkinsfile还是多个Jenkinsfile。它不会是一个多分支管道,因为我们不会创建测试分支,然后再合并回主管道。在存储库中,我们有product1.0分支

  • 问题内容: 我只是想知道下面的if语句是否有效: 我的目标是确保同时满足以下2个要求:1. value [6]必须位于目标2.目标中的value [0]或value [1]如果我做了一个不好的例子,请道歉我的问题是,是否可以在一个语句中进行三个AND&OR?非常感谢! 问题答案: 使用 括号 将条件分组: 请注意,如果将定义为一组,则可以在固定时间内进行查找: 并且,正如@Pramod在评论中提到

  • 问题内容: 我正在实现一个使用Realm在某些点(彼此之间不相关)持久化数据的应用程序。例如: 保存用户喜欢的项目。 (该应用进行聊天)保存聊天对话和最近的常量 为应用程序的某些请求实现永久性缓存 保存最近的搜索/表单以提供自动完成功能 (让这些点中的每一个都命名为模块/包) 每个模块/软件包都有一些持久性。我应该如何组织呢?从代码清洁度,性能或我应注意的任何方面考虑 选项A:使用具有唯一架构的唯

  • 本文向大家介绍如何在Java中使用一个或多个参数实现构造函数引用,包括了如何在Java中使用一个或多个参数实现构造函数引用的使用技巧和注意事项,需要的朋友参考一下 方法引用也可以适用于Java 8中的构造函数。可以使用类名和new关键字创建构造函数引用。 可以将构造函数引用分配给任何定义与该构造函数兼容的方法的功能接口引用。 语法 具有一个参数的构造函数引用示例 输出结果 具有两个参数的构造函数引