首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP提供空数组

PHP提供空数组
EN

Stack Overflow用户
提问于 2016-05-27 14:46:17
回答 3查看 1.1K关注 0票数 0

嗨,我正在尝试将一个json格式的字符串解码成一个关联数组。字符串是这个字符串:(我的字符串来自一个数据库,它在那里生成)

代码语言:javascript
复制
{ 
  "Parameter1":"<style>
                  #label-9 {
                  display: block;
                  text-align: left;
                  color: #fff;
                  }
                </style>", 
  "HistoryPosition":"1"
}

当我做json_decode()时,它会给我一个空数组。你知道为什么会这样吗?我相信这是来自"Parameter1“的东西,但找不到它是什么。

谢谢您:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-27 14:58:44

JSONLint表示JSON无效。

您可能要做的是:

代码语言:javascript
复制
$json = '{ 
  "Parameter1":"<style>
                  #label-9 {
                  display: block;
                  text-align: left;
                  color: #fff;
                  }
                </style>", 
  "HistoryPosition":"1"
}';
// remove the newlines
$clean = str_replace(["\r", "\n"], ['', ''], $json);
var_dump(json_decode($clean));

演示https://3v4l.org/X6KgM

票数 1
EN

Stack Overflow用户

发布于 2016-05-27 14:57:54

Akshay确实是对的,它是由断线引起的。

代码语言:javascript
复制
<pre><?php

$input = <<<EOD
{
  "Parameter1":"<style>
                  #label-9 {
                  display: block;
                  text-align: left;
                  color: #fff;
                  }
                </style>",
  "HistoryPosition":"1"
}
EOD;

// json_decode($input, true);
// echo json_last_error_msg(); // Syntax error

$input = str_replace("\r", null, $input);
$input = str_replace("\n", null, $input);

var_dump(json_decode($input, true));

指纹:

代码语言:javascript
复制
array(2) {
  ["Parameter1"]=> string(176) "<style>                  #label-9 {                  display: block;                  text-align: left;                  color: #fff;                  }                </style>"
  ["HistoryPosition"]=> string(1) "1"
}
票数 1
EN

Stack Overflow用户

发布于 2016-05-27 15:09:42

与其手写您自己的JSON字符串,您绝对应该使用PHP的内置函数来使您的类似操作至少更容易:

代码语言:javascript
复制
// Use a native PHP array to store your data; it will preserve the new lines
$input = [
    "Parameter1" => "<style>
                  #label-9 {
                  display: block;
                  text-align: left;
                  color: #fff;
                  }
                </style>",
    "HistoryPosition" => "1"
];

// This function will preserve everything in your strings
$encoded_value = json_encode($input);

// See your properly formatted JSON string
echo $encoded_value.'<br><br>';

// Decode the string back into an associative PHP array
echo '<pre>';
print_r(json_decode($encoded_value, true));
echo '</pre>';

更新数据库检索的新信息

json_last_error_msg();会产生以下错误:

控制字符错误,可能编码错误

如果您不关心保留换行符,那么这样做是可行的:

代码语言:javascript
复制
<?php
$db_data = '{ 
  "Parameter1":"<style>
                  #label-9 {
                  display: block;
                  text-align: left;
                  color: #fff;
                  }
                </style>", 
  "HistoryPosition":"1"
}';

$db_data = str_replace("\r", "", $db_data);
$db_data = str_replace("\n", "", $db_data);

echo '<pre>';
print_r(json_decode($db_data, true));
echo '</pre>';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37486420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档