将PHP中的JSON作为字符串处理?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (264)

学生在这里。对于一个项目,我实现了jQuery UI的自动完成小部件。该小部件允许调用PHP脚本,该脚本返回包含建议的JSON数据。我正在连接的API提供了一个允许条目的大型JSON文件(类似于30兆):

[
  {
    "id": 707860,
    "name": "Hurzuf",
    "country": "UA",
    "coord": {
      "lon": 34.283333,
      "lat": 44.549999
    }
  },
  {
    "id": 519188,
    "name": "Novinki",
    "country": "RU",
    "coord": {
      "lon": 37.666668,
      "lat": 55.683334
    }
  },

你明白了。要查找部分匹配,这是我写的PHP脚本:

<?php

$cityPage = file_get_contents("citylist.json");

function strpos_all($haystack, $needle) {
    $offset = 0;
    $cityArray = array();
    while (($pos = strpos($haystack, $needle, $offset)) !== FALSE) {
        $offset   = $pos + 1;
        $length= (strpos($haystack, '"coord"', $offset)-$pos);
        $city = str_replace('",
    "country": "',", ",(substr($haystack, $pos, ($length-7))));
        if (in_array($city,$cityArray) == FALSE) {
          $cityArray[] = $city;
        }
    }
    return $cityArray;
}
echo json_encode(strpos_all($cityPage, $_GET['term']));
?>

我原本试图在file_get_contents之后使用json_decode但是认为这真的是一个不必要的性能命中,因为1)JSON文件太大而且2)我真的不在乎它是否是一个JSON对象(这是正确的术语吗?)in PHP,我可以像字符串一样轻松处理它。

所以有三个问题:

  1. 你是否同意将其作为一个字符串?
  2. 正如你可以看到我设置我的$ city变量(删除中间的所有东西 - 我真的只想要“伦敦,英国”格式的所有东西),行间距/白色间距变得奇怪。有没有更好的方法来处理这个?
  3. 与上面的#2相关。正如你在我的substr函数中看到的那样,我不得不从我计算出的长度中减去7得到所需的输出(我基本上是通过调整火并将其移入直到我得到所需的输出来实现的)。我怎么知道这个/将来更好地计算它?

提前致谢!

提问于
用户回答回答于

一种方法是确保使用该json_decode方法将获取的JSON建议解析为数组。通过这个数组循环并检查query string针对namecountry每个对象的属性在每个循环中,然后对那些匹配,构建建议字符串和推入$cityArray

但由于JSON建议数据的大小可能很大,这种逻辑可能会对脚本的性能产生负面影响。

扫码关注云+社区

领取腾讯云代金券