首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Json解码PHP中从返回的响应

Json解码PHP中从返回的响应
EN

Stack Overflow用户
提问于 2013-09-28 17:32:10
回答 1查看 1.4K关注 0票数 0

我试着向这个网址提出一个关于披萨的定义.http://www.google.com/dictionary/json?callback=a&client=p&sl=en&tl=en&q=pizza

我最初的反应是这样的……

代码语言:javascript
运行
复制
a({"query":"pizza","sourceLanguage":"en","targetLanguage":"en","primaries":[{"type":"headword","terms":[{"type":"text","text":"piz·za","language":"en","labels":[{"text":"Noun","title":"Part-of-speech"}]},{"type":"phonetic","text":"/ˈpētsə/","language":"und"},{"type":"sound","text":"http://www.gstatic.com/dictionary/static/sounds/de/0/pizza.mp3","language":"und"}],"entries":[{"type":"related","terms":[{"type":"text","text":"pizzas","language":"und","labels":[{"text":"plural"}]}]},{"type":"meaning","terms":[{"type":"text","text":"A dish of Italian origin consisting of a flat, round base of dough baked with a topping of tomato sauce and cheese, typically with added meat or vegetables","language":"en"}]}]}]},200,null) 

在搜索完互联网和stackovrflow (例如decode for Google Dictionary API)上类似的问题之后,我使用下面的代码来清理它,然后尝试解码它.

代码语言:javascript
运行
复制
$rawdata = preg_replace("/\\\x[0-9a-f]{2}/", "", $rawdata);
$raw = explode("{",$rawdata);
unset($raw[0]);
$rawdata = implode($raw);

$raw = explode("}", $rawdata);
unset($raw[count($raw)-1]);
$rawdata = implode($raw);

$rawdata = "{". $rawdata ."}";

这给了我下面那条看起来很像.

代码语言:javascript
运行
复制
{"query":"pizza","sourceLanguage":"en","targetLanguage":"en","primaries":["type":"headword","terms":["type":"text","text":"piz·za","language":"en","labels":["text":"Noun","title":"Part-of-speech"],"type":"phonetic","text":"/ˈpētsə/","language":"und","type":"sound","text":"http://www.gstatic.com/dictionary/static/sounds/de/0/pizza.mp3","language":"und"],"entries":["type":"related","terms":["type":"text","text":"pizzas","language":"und","labels":["text":"plural"]],"type":"meaning","terms":["type":"text","text":"A dish of Italian origin consisting of a flat, round base of dough baked with a topping of tomato sauce and cheese, typically with added meat or vegetables","language":"en"]]]} 

但它还是不能正确解码,我很困惑.

我一直在用这个工具,http://json.parser.online.fr/说.SyntaxError:意外令牌:

我现在在想,我最初对json响应的所有黑客攻击只是让问题变得更糟,并且可能有一种更好的方法来处理最初的响应。

有人能解释一下我的问题吗?

预先感谢:D

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-28 18:33:16

我认为这是一种过度复杂的情况。greediness的regex默认属性使得在第一个和最后一个{}之间提取完整的json主体变得很简单。

代码语言:javascript
运行
复制
<?php

$str = 'a({"query":"pizza","sourceLanguage":"en","targetLanguage":"en","primaries":[{"type":"headword","terms":[{"type":"text","text":"piz·za","language":"en","labels":[{"text":"Noun","title":"Part-of-speech"}]},{"type":"phonetic","text":"/ˈpētsə/","language":"und"},{"type":"sound","text":"http://www.gstatic.com/dictionary/static/sounds/de/0/pizza.mp3","language":"und"}],"entries":[{"type":"related","terms":[{"type":"text","text":"pizzas","language":"und","labels":[{"text":"plural"}]}]},{"type":"meaning","terms":[{"type":"text","text":"A dish of Italian origin consisting of a flat, round base of dough baked with a topping of tomato sauce and cheese, typically with added meat or vegetables","language":"en"}]}]}]},200,null)';

if (preg_match('/\{.*\}/', $str, $matches)) {
        $json = json_decode($matches[0], true);
        var_dump($json);
}

返回您:

代码语言:javascript
运行
复制
array(4) {
  ["query"]=>
  string(5) "pizza"
  ["sourceLanguage"]=>
  string(2) "en"
  ["targetLanguage"]=>
  string(2) "en"
  ["primaries"]=>
  array(1) {
    [0]=>
    array(3) {
      ["type"]=>
      string(8) "headword"
      ["terms"]=>
      array(3) {
        [0]=>
        array(4) {
          ["type"]=>
          string(4) "text"
          ["text"]=>
          string(9) "piz·za"
          ["language"]=>
          string(2) "en"
          ["labels"]=>
          array(1) {
            [0]=>
            array(2) {
              ["text"]=>
              string(4) "Noun"
              ["title"]=>
              string(14) "Part-of-speech"
            }
          }
        }
        [1]=>
        array(3) {
          ["type"]=>
          string(8) "phonetic"
          ["text"]=>
          string(19) "/ˈpētsə/"
          ["language"]=>
          string(3) "und"
        }
        [2]=>
        array(3) {
          ["type"]=>
          string(5) "sound"
          ["text"]=>
          string(62) "http://www.gstatic.com/dictionary/static/sounds/de/0/pizza.mp3"
          ["language"]=>
          string(3) "und"
        }
      }
      ["entries"]=>
      array(2) {
        [0]=>
        array(2) {
          ["type"]=>
          string(7) "related"
          ["terms"]=>
          array(1) {
            [0]=>
            array(4) {
              ["type"]=>
              string(4) "text"
              ["text"]=>
              string(6) "pizzas"
              ["language"]=>
              string(3) "und"
              ["labels"]=>
              array(1) {
                [0]=>
                array(1) {
                  ["text"]=>
                  string(6) "plural"
                }
              }
            }
          }
        }
        [1]=>
        array(2) {
          ["type"]=>
          string(7) "meaning"
          ["terms"]=>
          array(1) {
            [0]=>
            array(3) {
              ["type"]=>
              string(4) "text"
              ["text"]=>
              string(155) "A dish of Italian origin consisting of a flat, round base of dough baked with a topping of tomato sauce and cheese, typically with added meat or vegetables"
              ["language"]=>
              string(2) "en"
            }
          }
        }
      }
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19069756

复制
相关文章

相似问题

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