【问题标题】:Storing JSON data in database: object could not be converted to string error在数据库中存储 JSON 数据:对象无法转换为字符串错误
【发布时间】:2014-04-28 08:43:02
【问题描述】:

简而言之,我的数据是用 Javascript 编写的:

JSONdata = {
    name: form.name.value,
    address1: form.custa.value,
    address2: form.custa2.value,
    postcode: form.custpc.value,
    order: fullorder,
    cost: document.getElementById('total')
  }

fullorder 是要订购的产品数组。 : [{"idnum":"2","cost":232,"quantity":"1"},{"idnum":"1","cost":2342,"quantity":"3"}]

我有一个 XJAX 可以将这些数据字符串化,如下所示:

{"name":"j","address1":"jh","address2":"jhj","postcode":"h","order":[{"idnum":"2","cost":232,"quantity":"1"},{"idnum":"1","cost":2342,"quantity":"3"}],"cost":{}}

在 PHP 中它以数组的形式给出:

    Array
(
    [0] => stdClass Object
        (
            [idnum] => 2
            [cost] => 232
            [quantity] => 1
        )

    [1] => stdClass Object
        (
            [idnum] => 1
            [cost] => 2342
            [quantity] => 3
        )

)

我的问题是如何将其存储在数据库中? 我试过 serialize 和 json_encode 但都给了我一个: “stdClass 类的对象无法转换为字符串”。

任何帮助将不胜感激!

-> 不用担心查询数据库和JSON之争。 我将立即获取所有数据,所以这不是问题:)

编辑:感谢大家的回复,我给你一些关于它是如何工作的信息:

所以当我将 JSON 发送到我的 PHP 时,我有一个脚本可以像这样提取所有数据:

$intel = extractdata();
function extractdata() {
    if (isset($_REQUEST['data'])){
    $jsonDump = json_decode($_REQUEST['data']);
  foreach($jsonDump as $key => $value) {
    $obj[$key] = $value;
  }
  return $obj;
}

所以这给了我

$intel['name'] = // form.name.value variable
$intel['address1'] = // form.name.value variable

$intel['order'] 给了我上面看到的 PHP 数组。我想将所有这些存储到数据库中的列中:Customername、address1、address2、postcode、order、cost

我认为只是 $neworder = json_encode($intel['order']) 可以让我将其存储在数据库中,但它仍然会引发转换错误。

谢谢

【问题讨论】:

  • 标准化您的数据库并将其存储在多个列中。
  • 那么,哪一行代码实际上抛出了这个错误?很高兴您向我们展示了数据(没有讽刺),但这只是应用程序的一部分;-)
  • @N.B.:不必居高临下。
  • 标记为 PHP,但不存在 PHP 代码。显然是尝试将 PHP 数据结构存储到数据库中的问题,而不是现有的字符串形式(通过 HTTP 接收,已序列化 JSON)。
  • @Cerbrus - 我不是,也不是想侮辱,这个人显然有能力,但他只是从树上看不到森林.

标签: javascript php mysql ajax json


【解决方案1】:

所以基本上你有一个包含这样一个对象的数组:

$o = array((Object)array(array("idnum"=>2, "cost"=>232, "quantity"=>1), array("idnum"=>1, "cost"=>2342, "quantity"=>3)));

json_encode() 回应这个将返回一个 json 字符串:

echo json_encode($o);

结果是

[
  {
    "0": {
      "idnum": 2,
      "cost": 232,
      "quantity": 1
    },
    "1": {
      "idnum": 1,
      "cost": 2342,
      "quantity": 3
    }
  }
]

这不适合你吗?另外你是在使用任何框架还是只是纯 php?

【讨论】:

  • 感谢您的回复,我已经更新了我的问题以更好地反映我的要求,只使用纯 PHP!
【解决方案2】:

如果你有这个:

$jsonDump = json_decode($_REQUEST['data']);

我相信你不需要这个:

  foreach($jsonDump as $key => $value) {
    $obj[$key] = $value;
  }

而且,你不要启动$obj(应该是$obj = null在函数的开头或者什么的)。

您需要json_encode((array) $obj); 在字符串化之前将对象转换为简单数组,这应该可以解决您的问题。您还可以实现_toSting($obj) 函数,例如:

  $str = '{';
  foreach($obj as $key => $value) {
    $str .= '"'.$key.'":"'.$value.'"';
    $str .= ',';
  }
  $str = trim(',',$str).'}';

【讨论】:

  • 您的“toString”函数不适用于包含数组、对象或其他复杂类型的对象。
  • 真的,我只是一个简单的例子,我们可以在 $str .= '"'.$key.'":"'.toString($value).'"';
  • 你的意思是“递归”。但是你为什么要编写自己的json_encode 版本呢?
  • 我的意思是递归,它只是@Cerbrus 解决方案的一个例子,为提问的人显示另一个选项。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2013-11-01
  • 1970-01-01
  • 2021-10-29
相关资源
最近更新 更多