当前位置: 首页 > 面试题库 >

使用正确的类型将mysql结果转换为json

柳鸿博
2023-03-14
问题内容

我知道如何获取mysql行并将其转换为json:

$row = mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM table WHERE id=1"));
echo json_encode($row); // it's an ajax-call

但:

数据库行具有不同的类型,例如int,float,string。通过使用json_encode()进行转换,所有结果都是字符串。

有没有比这更好的方法来更正类型:

$row['floatvalue1'] = 0+$row['floatvalue1'];
$row['floatvalue2'] = 0+$row['floatvalue2'];
$row['intvalue1'] = 0+$row['intvalue1'];

我想遍历键并添加0,因为:

  • 第一个编码规则:干-不要重复自己

但我不能,因为:

  • 行还具有数字以外的其他类型(字符串,日期)
  • 有很多列
  • 设计在开发人员中,因此列名经常更改

在此先感谢,并请原谅我的英语不好:-)

编辑 (回答来自卡西米尔等伊波利特评论道题):

我使用ajax将此php代码称为动态获取sql值。在我的javascript代码中,我使用如下结果:

result['intvalue1'] += 100;

让说intval1的JSON-结果是50,计算出的结果是:

“ 50100”,而不是150


问题答案:

下面的代码只是一个概念证明。在生产中使用它之前,需要将其封装在函数/方法中,并进行一些抛光(mysqli_fetch_field()在处理任何行之前,请在循环中调用并存储它返回的对象,而不是每行一次)。

它使用该函数mysqli_fetch_field()获取有关结果集各列的信息,并将具有数字类型的那些列转换为数字。值MYSQLI_TYPE_*常量中可以找到的文档页面的mysqli预定义的常量。

// Get the data
$result = mysqli_query($db, "SELECT * FROM table WHERE id=1");
$row    = mysqli_fetch_assoc($result);

// Fix the types    
$fixed = array();
foreach ($row as $key => $value) {
    $info = mysqli_fetch_field($result);
    if (in_array($info->type, array(
            MYSQLI_TYPE_TINY, MYSQLI_TYPE_SHORT, MYSQLI_TYPE_INT24,    
            MYSQLI_TYPE_LONG, MYSQLI_TYPE_LONGLONG,
            MYSQLI_TYPE_DECIMAL, 
            MYSQLI_TYPE_FLOAT, MYSQLI_TYPE_DOUBLE
    ))) {
        $fixed[$key] = 0 + $value;
    } else {
        $fixed[$key] = $value;
    }
}

// Compare the results
echo('all strings: '.json_encode($row)."\n");
echo('fixed types: '.json_encode($fixed)."\n");


 类似资料:
  • 5.5 结果的类型转换 类型转换(Formatter机制)是WebMagic 0.3.2增加的功能。因为抽取到的内容总是String,而我们想要的内容则可能是其他类型。Formatter可以将抽取到的内容,自动转换成一些基本类型,而无需手动使用代码进行转换。 例如: @ExtractBy("//ul[@class='pagehead-actions']/li[1]//a[@class='socia

  • 我正在尝试实现REST API,其中一部分是将数据格式化为JSON。我能够从mysql数据库中检索数据,但是我收到的对象并不是我所期望的。这是我的代码 结果: 如何实现返回如下所示的json格式:

  • 问题内容: 我正在寻找python库或任何将.XLSX文件转换为.CSV文件的帮助。 问题答案: 使用该模块阅读excel ,然后可以使用该模块创建自己的csv。 在命令行中安装xlrd模块: Python脚本:

  • 问题内容: 我正在尝试使用Android中的WebView上传文件。 这是使用的代码: 的 问题 是,当外部库,我 必须 使用()触发此方法的执行,如在fileChooserParams参数传递的MIME类型:。在允许的mime类型列表中,我看不到其中的大多数。 结果,我在LogCat中发现此错误: 如果我简单地添加,一切都将按预期工作! 现在的 问题 是:在我要提交给cordova-androi

  • 我试图上传一个文件使用WebView在Android。 现在的问题是:在我要提交给Cordova-Android贡献者的合并请求中,我如何安全地将fileChooserParams转换为正确的格式?

  • 我看了几十个答案,但他们做的大多数是建议或类似的技巧。在我的例子中,我要转换的类型是。下面是这个POJO: 由于重构,现在是一个数组。 (显然这是一种简化,对象多了很多字段)。我只想获得一个数组,以便将其传递给。以下是我想要的: 但是根据IDE返回。生成器不工作,但无论如何这不是一个好主意,我们不想重新分配或扰乱那些未来。只需返回它们的数组。传递不会编译。 不要把这个问题标记为重复问题,除非你绝对