Json_decode отображается неправильно - PullRequest
1 голос
/ 08 июля 2020

Привет, я весь день пытался решить эту проблему.

по какой-то причине, если я загружаю JSON удаленно, он правильно декодирует, используя следующее:

$uri = 'http://example.com/json
$data = file_get_contents($uri); 
$json = json_decode($data); 

но если Я пытаюсь загрузить json из varibl, это не работает print_r () просто ничего не дает, я пробовал;

$attch = '{"url": "https://example.com/messages/AgEFFo5ZtHR8rorLtJhMdpu9FKM_X11wZA==/attachments/0", "content-type": "application/pdf", "name": "20201181000954.pdf", "size": 18419}';


$jsn = json_decode($attch, true);
        
$url = $jsn[0]->url;
$size = $jsn[0]->size;
$name = $jsn[0]->name;
$content_type = $jsn[0]->content-type;


print($url);
print_r($size);
print_r($name);

echo 'testing';

и

$attch = '{"url": "https://example.com/messages/AgEFFo5ZtHR8rorLtJhMdpu9FKM_X11wZA==/attachments/0", "content-type": "application/pdf", "name": "20201181000954.pdf", "size": 18419}';


$jsn = json_decode($attch, true);
        
$url = $jsn->url;
$size = $jsn->size;
$name = $jsn->name;
$content_type = $jsn->content-type;


print_r($url);
print_r($size);
print_r($name);

echo 'testing';

I у меня есть только echo 'testing';, так что я могу легко проверить, действительно ли страница загружена.

Ответы [ 2 ]

3 голосов
/ 08 июля 2020

Вы json получаете формат массива не в объекте. Вы не можете получить доступ как объект.

Вывод

var_dump($jsn);
print_r($jsn);
array(4) {
  ["url"]=>
  string(79) "https://example.com/messages/AgEFFo5ZtHR8rorLtJhMdpu9FKM_X11wZA==/attachments/0"
  ["content-type"]=>
  string(15) "application/pdf"
  ["name"]=>
  string(18) "20201181000954.pdf"
  ["size"]=>
  int(18419)
}
Array
(
    [url] => https://example.com/messages/AgEFFo5ZtHR8rorLtJhMdpu9FKM_X11wZA==/attachments/0
    [content-type] => application/pdf
    [name] => 20201181000954.pdf
    [size] => 18419
)

Вы должны получить доступ к значению, используя

$jsn['url'];

Код:

<?php
// Your code here!
$attch = '{"url": "https://example.com/messages/AgEFFo5ZtHR8rorLtJhMdpu9FKM_X11wZA==/attachments/0", "content-type": "application/pdf", "name": "20201181000954.pdf", "size": 18419}';


$jsn = json_decode($attch, true);
        
//var_dump($jsn);
print_r($jsn);
 
$url = $jsn["url"];
$size = $jsn["size"];
$name = $jsn["name"];
$content_type = $jsn["content-type"];


echo $url."\n";
echo $size."\n";
echo $name."\n";
echo $content_type."\n";

?>
2 голосов
/ 08 июля 2020

Прежде всего, вы не можете использовать следующую строку

$content_type = $json->content-type

, поскольку она недействительна. Переменные и свойства объекта в идеале должны быть camelCase, StudlyCase или snake_case, в зависимости от предпочтений, но не пытайтесь использовать kebab-case, так как это вызовет проблемы.

В противном случае проблема в том, что json_decode() имеет 2 аргумента , второй - вернуть ассоциативный массив, а не объект (StdClass).

Просто замените json_decode($attch, true) на json_decode($attch) и посмотрите, что я упомянул о ваших именах переменных, если тип содержимого является ключом и не может быть изменен, оставьте json_decode($attch, true) как есть и получите доступ к результатам с помощью $jsn['key'] example $json['content-type']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...