【问题标题】:Parse JSON Freebase results in PHP在 PHP 中解析 JSON Freebase 结果
【发布时间】:2011-09-15 05:26:52
【问题描述】:

如果这太基本了,我真的很抱歉,但我真的不知道该怎么做。

我正在使用这个 jquery 自动完成插件:http://devthought.com/wp-content/projects/jquery/textboxlist/Demo/

编辑:这是我用于自动完成的 jquery 代码:

$(function() {
        var t = new $.TextboxList('#form_topick_tags', {unique: true, plugins: {autocomplete: {
                minLength: 2,
                queryRemote: true,
                remote: {url: 'autocomplete2.php'}
            }}});

插件使用 PHP 进行自动完成,这是一个示例,它返回以下输出:"id, text, null (html I don't need), some html"

$response = array();
            $names = array('Abraham Lincoln', 'Adolf Hitler', 'Agent Smith', 'Agnus', 'Etc');

            // make sure they're sorted alphabetically, for binary search tests
            sort($names);

            $search = isset($_REQUEST['search']) ? $_REQUEST['search'] : '';

            foreach ($names as $i => $name)
            {
                if (!preg_match("/^$search/i", $name)) continue;
                $filename = str_replace(' ', '', strtolower($name));
                $response[] = array($i, $name, null, '<img src="images/'. $filename . (file_exists('images/' . $filename . '.jpg') ? '.jpg' : '.png') .'" /> ' . $name);
            }

            header('Content-type: application/json');
            echo json_encode($response);

我需要一个类似的 PHP 来处理这个结果:http://www.freebase.com/private/suggest?prefix=beatles&type_strict=any&category=object&all_types=false&start=0&limit=10&callback=

...作为 “beatles” 的 $search 值,并获得以下输出:

guid,"name",null,"name<span>n:type name</span>"

所以,第一个结果是:

0,"The Beatles",null,"The Beatles<span>Band</span>"

当然,我需要从那个 PHP 查询 freebase.com。我的意思是:

        +---------------+         +-----------+        +------------+
        |               |         |           |        |            |
        |  TextboxList  +-------->|   PHP     +------->|  Freebase  |
        |               |         |           |        |            |
        +---------------+         +-----------+        +------+-----+
                                                              |
             JSON                     JSON                    |
          TextboxList   <--------+  freebase       <----------+

这可能吗?谢谢!

【问题讨论】:

  • 首先,/^$search/i 可能不是你想要的;试试/^search$/i 虽然他们只有在没有找到搜索时才能通过那一点

标签: php json autocomplete freebase


【解决方案1】:

试试这个:

$response = array();

$search = isset($_REQUEST['search']) ? $_REQUEST['search'] : '';

$myJSON = file_get_contents('http://www.freebase.com/private/suggest?prefix=' . urlencode($search));

$musicObj = json_decode($myJSON); // Need to get $myJSON from somewhere like file_get_contents()

foreach ($musicObj->result as $item)
{
    $response[] = array($item->guid, $item->name, null, $item->name . '<span>'.$item->{'n:type'}->name.'</span>');
}

header('Content-type: application/json');
echo json_encode($response);

然后第一个 JSON 转义结果给出:

["#9202a8c04000641f800000000003ac10","The Beatles",null,"The Beatles<span>Band<\/span>"]

但尽管如此,您实际上根本不需要使用 PHP 来执行此操作。您可以通过 JavaScript 完成这一切,避免额外访问您的服务器。如果您向 freebase 提供 callback 参数,它可以创建 JSONP(它是 JSON 包装在对函数的调用中,使用您选择的函数名称),您可以在 jQuery 中获取它,然后根据自己的喜好在 JavaScript 中进一步操作.但以上是根据您使用 PHP 的原始方法。

【讨论】:

  • brettz9,对不起,我对此有点迷茫。我应该将 URL freebase.com/private/suggest?prefix=etc... 放在哪里?因为自动完成插件只是像“remote: {url: 'autocomplete.php'}”一样调用这个PHP,我的意思是,$search 值被传递给了PHP,我认为PHP 应该使用来自freebase 的查询,对吧? (Jquery -> PHP -> Freebase -> JSON Freebase -> 新格式的 JSON)
  • 我已经更改了——只需在您的网址末尾添加?search=beatles
  • brettz9,对不起,这很简单……我想就是这样!谢谢,我现在就试试...
  • 好的,注意我刚刚添加的关于 JSONP 的注释。
  • 我明白了。我用调用自动完成插件的 jquery 代码编辑了问题...使用 JSONP 会比这更困难,或者你能帮我做吗?如果不是很好,我知道我在询问 PHP 解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多