首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >标准序列化还是自定义?

标准序列化还是自定义?
EN

Stack Overflow用户
提问于 2010-12-24 00:23:59
回答 4查看 456关注 0票数 1

任何人都可以识别这种格式(如果它是标准格式),或者我应该手动分解它以获得数组吗?谢谢。

代码语言:javascript
运行
复制
{ coords : {lon : 7.41891, lat : 43.73253}, address : "", zipCode : "98000", city : "Monaco", sK : "Monaco", sQ : "852", fV : "", fZ : "98000 Monaco", fW : "- MC - Monaco: Monaco (98000)", gf : "31NDFzeHoxMGNORE11TnpNeU5UTT1jTnk0ME1UZzVNUT09", reflexId : "84167", areaLabel : "Monaco", jalon : 4}

YAML to VarExport提供了这一点,但随后失败了。

代码语言:javascript
运行
复制
array (
  'coords' => 
  array (
    'lon' => 20.48406,
    'lat' => 44.80572,
  ),
)

解决方案:

代码语言:javascript
运行
复制
$data = preg_replace('#([\w]+) :#is', '"$1" :', $data);

结果:

代码语言:javascript
运行
复制
array (
  'coords' => 
  {
     'lon' => 7.41891,
     'lat' => 43.73253,
  },
  'address' => '',
  'zipCode' => '98000',
  'city' => 'Monaco',
  'sK' => 'Monaco',
  'sQ' => '852',
  'fV' => '',
  'fZ' => '98000 Monaco',
  'fW' => '- MC - Monaco: Monaco (98000)',
  'gf' => '31NDFzeHoxMGNORE11TnpNeU5UTT1jTnk0ME1UZzVNUT09',
  'reflexId' => '84167',
  'areaLabel' => 'Monaco',
  'jalon' => 4,
)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-24 00:38:15

它是有效的JavaScript代码,几乎是JSON。为了使它成为有效的JSON,它需要将对象属性名括在双引号中,并用逗号分隔数组项。

这一点:

代码语言:javascript
运行
复制
$text = preg_replace('/(\r?\n){2}/', ',', trim($text));
$text = preg_replace('/([{,])\s?([a-z0-9_]+)\s?:/i', '$1"$2":',$text);
print_r(json_decode($text));

将适用于您的示例。

但您不应使用它,因为当存在, { inside值时,它将失败!

最安全的方法是自己构造一个解析器。

票数 2
EN

Stack Overflow用户

发布于 2010-12-24 00:35:46

在我看来,json序列化是相当标准的。:)

票数 0
EN

Stack Overflow用户

发布于 2010-12-24 00:45:59

错误的JSON。我会将散列键转换为字符串,然后转换为json_decode。您可以使用PHP Tokenizer相当简单地做到这一点。

代码语言:javascript
运行
复制
function parse($code) {
    $result = '';
    $tokens = tokens_get_all('<?php ' . $code);
    array_shift($tokens); // drop <?php
    foreach ($tokens as $token) {
        if (!is_array($token)) {
            $result .= $token;
            continue;
        }

        if ($token[0] == T_STRING) {
            $token[1] = '\'' . addslashes($token[1]) . '\'';
        }

        $result .= $token[1];
    }

    return json_decode($result);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4520549

复制
相关文章

相似问题

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