【问题标题】:PHP/JSON - Remove every occurence of certain character before another characterPHP/JSON - 在另一个字符之前删除某个字符的每个出现
【发布时间】:2013-12-22 22:35:05
【问题描述】:

我的 JSON 编码特殊,所以我需要删除右开括号之前的每个引号。 (例如 { 之前的每个 " ) 是否可以在 PHP 中执行此操作,如果可以,如何操作?

"{ 我想删除括号前所有出现的引号。

此处为 JSON:http://devticker.pw/json-data.php

代码在这里:

while($row = mysqli_fetch_array($result))
{
$data[] = '{"c": [{ "v": ' . $row['Timestamp'] . '"},{"v":' . $row['USD'] . '} ]}';
}

$str = json_encode(array("rows"=>$data));

$str = substr($str, 1);

$str = str_replace("\"{", "{", $str);

$str = '{"cols":[{"type":"string"},{"type":"number"}],' . $str;

$str = stripslashes($str);

echo $str;

【问题讨论】:

  • 您正在操作原始 JSON 而不是数组中的元素,因为...?
  • 我将 MySQL 数据库中的数据转换为数组(while 循环),然后对它们进行 json 编码。我不认为我可以从数组元素本身做到这一点。
  • 好的。看起来您有一个 JSON 编码数组,其中的元素保存为 JSON 编码,而不是存储为一个 JSON 字符串的多维数组。给出的答案有望修复您的代码,但如果可能的话,您应该首先正确编码。你能展示生成它的代码吗?
  • 贴出生成json的代码,或许我们可以帮你从源头修复。
  • 我编辑了原来的问题,现在代码在那里

标签: php json character


【解决方案1】:

试试

while($row = mysqli_fetch_array($result))
{
    $data[] = array("c" => array(array( "v" => $row['Timestamp']), array("v" => $row['USD'] ))));
}

$rows = array("rows"=>$data));

$cols = array("cols" => array(array("type"=>"string"),array("type"=>"number")),$row);

$str = json_encode($cols);

echo $str;

【讨论】:

  • str_replace 对我有用,但无论如何感谢您的详细回答!
【解决方案2】:

问题是您手动生成部分 JSON,然后使用json_encode 对该字符串进行编码,这会转义不应转义的引号。这是错误的。使用 str_replace 删除转义是一种解决方法,不是生成 JSON 的正确方法。

如果您只使用 json_encode 生成 JSON,它会很好地工作。像这样的东西应该可以工作:

// your columns
$cols = array();
$cols[0] = array('type' => 'string');
$cols[1] = array('type' => 'number');

// your rows
$rows = array();

while ($row = mysqli_fetch_array($result)) {
    $r = new stdClass();
    $r->c = array();

    $r->c[0] = array('v' => $row['Timestamp']);
    $r->c[1] = array('v' => $row['USD']);

    $rows[] = $r;
}

// the final result
$result = array(
    'cols' => $cols,
    'rows' => $rows
);

// don't forget this
header('Content-Type: application/json');

echo json_encode($result);

【讨论】:

    【解决方案3】:

    真的不明白为什么需要这样做(以及为什么要处理原始 JSON 字符串),但您可以简单地使用 php 的字符串替换功能,str_replace

    $your_json_string = str_replace("\"{", "{", $your_json_string);
    

    【讨论】:

      【解决方案4】:

      您使用的是什么版本的 PHP?

      如果 5.3 或更高版本你可以使用这个:

      return json_encode($var, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT);
      

      drupal 之类的框架已经处理了这些东西 - 你可能可以从这里撕掉一些代码来滚动你自己的 json_encode 函数https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_json_encode/7

      【讨论】:

        【解决方案5】:
        $json = str_replace('"{','{',$json) 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-23
          • 1970-01-01
          • 2015-12-03
          • 1970-01-01
          • 2016-10-06
          • 2014-07-17
          • 2020-11-23
          相关资源
          最近更新 更多