php json decode - получить значение - PullRequest
0 голосов
/ 19 июня 2010

Я пытаюсь извлечь определенное значение из содержимого JSON. Здесь это ссылка с кодом json http://www.ebayclassifieds.com/m/AreaSearch?jsoncallback=json&lat=41.1131514&lng=-74.0437521 Как вы можете видеть, код отображается

json({items:[{url:"<a href="http://fairfield.ebayclassifieds.com/" rel="nofollow noreferrer">http://fairfield.ebayclassifieds.com/</a>",name:"Fairfield"},{url:"<a href="http://newyork.ebayclassifieds.com/" rel="nofollow noreferrer">http://newyork.ebayclassifieds.com/</a>",name:"New York City"}],error:null}); 
Мне нужно извлечь первый URL-адрес, который в данном случае является "http://fairfield.ebayclassifieds.com/" и его имя, значение которого" Fairfield ", я мог бы сделать это с помощью регулярного выражения, но я бы предпочел использовать json_decode. К сожалению, когда я пытаюсь декодировать его не работает
$json  = getContent("http://www.ebayclassifieds.com/m/AreaSearch?jsoncallback=json&lat=41.1131514&lng=-74.0437521");
$test = json_decode($json, true);

Ответы [ 2 ]

2 голосов
/ 19 июня 2010

Как уже сказал danp, возвращаемый JSON заключен в вызов функции (определяется jsoncallback=json).Вы не можете полностью избавиться от этого, но, просто используя AreaSearch?jsoncallback=&lat=41.1131514&lng=-74.0437521, вы удаляете хотя бы json в начале строки, и вы можете избавиться от скобок:

$json = trim(trim($json), "();");

, используя:

{items:[{url:"http://fairfield.ebayclassifieds.com/",name:"Fairfield"},{url:"http://newyork.ebayclassifieds.com/",name:"New York City"}],error:null}

К сожалению, строка JSON недопустима.Ключи (items, url, ...) должны быть заключены в кавычки ".Вы можете легко проверить, что вы получаете синтаксическую ошибку с помощью json_last_error() (код ошибки 4, JSON_ERROR_SYNTAX).

Обновление:

В соответствии с этим вопросом: Неправильный синтаксический анализ JSON с использованием PHP , вы можете сделать строку JSON допустимой с помощью:

$json = preg_replace('/(\w+):/i', '"\1":', $json);

Это заключает ключи в кавычки.


Если строка будет действительной, вы можете сгенерировать массив с помощью:

$a = json_decode($json, true);

, который даст вам:

Array
(
    [items] => Array
        (
            [0] => Array
                (
                    [url] => http://fairfield.ebayclassifieds.com/
                    [name] => Fairfield
                )
            [1] => Array
                (
                    [url] => http://newyork.ebayclassifieds.com/
                    [name] => New York City
                )
        )
    [error] => 
)

Таким образом, вы можете получить первый URL и имя через $a['items'][0]['url'] и $a['items'][0]['name'] или


Но я повторяю, JSON, который вы получите в ответ, недействителен и вы не можете разобрать его с json_decode() в исходном виде.

0 голосов
/ 19 июня 2010

Неверно JSON. Ключи должны быть заключены в кавычки.

Вы можете проверить свой JSON, используя отличный JSON Lint сайт.

Это верная версия возвращаемых данных:

 {
"items": [
    {
        "url": "http://fairfield.ebayclassifieds.com/",
        "name": "Fairfield"
    },
    {
        "url": "http://newyork.ebayclassifieds.com/",
        "name": "New York City"
    }
],
 "error": "null"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...