У меня есть код JSON, который я помещаю в файл JSON с именем data.json.
код JSON:
[
{"value":"23","date":"03/2018"},
{"value":"43","date":"03/2019"},
{"value":"34","date":"12/2017"},
{"value":"13","date":"01/2019"},
{"value":"34","date":"02/2019"}
]
Теперь код php, который я использую для извлечения данных, выглядит следующим образом:
$url = "data.json" ;
$ch = curl_init() ;
curl_setopt($ch, CURLOPT_URL, $url) ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch) ;
$data = json_decode($result, true) ;
foreach($data as $mydata)
{
$data1 = $mydata["value"] ;
$data2 = $mydata["date"] ;
echo $data1 ." : ". $data2 ;
echo "<br/>";
}
Я не понимаю, что не так с кодом, но он выдает ошибку Warning
Invalid argument supplied for foreach()
Это происходит потому, что данные возвращают значение НУЛЕВОЙ, но я не знаю, почему мой формат данных JSON неверен. Формат выглядит нормально. Но он по-прежнему возвращает значение NULL.
Что вам дает console.info($result);?
var_dump $data, чтобы увидеть, что там находится - когда я использую ваш json напрямую, это работает для меня
не могли бы вы сбросить переменную $mydata, пожалуйста, и показать нам
Var_dump($data) дает мне NULL Result @rapaelec Но почему?
foreach также неверен, он должен быть foreach($data as $key => $value)
@ B001ᛦ Нет опечатки, ему нужны ключ и значение, foreach должен иметь ключ и значение для следующих строк кода $data1 = $mydata["value"] ; $data2 = $mydata["дата"] ;
Я изменил заголовок и описание вопроса. пожалуйста, дайте мне знать, почему я получаю эту ошибку
этот файл json находится на вашем сервере? почему вы используете cUrl и бот file_get_contents?
Вы уверены, что используете правильный URL?
@ shushu304 Может быть, я могу использовать этот контент с внешнего URL-адреса, поэтому я использую cURL.
@ B001ᛦ да, оба файла находятся в одной папке
@abnit-chauhan использовать cUrl для локального файла бесполезно, попробуйте перейти на использование file_get_contents, если это локальный файл, и используйте curl, если это URL/






при использовании cUrl только с именем файла cUrl думает, что это URL-адрес, поэтому вы получите ошибку
curl: (6) Could not resolve host
если это локальный файл, я предпочту использовать file_get_contents...
$json = file_get_contents("file.json");
put here your json decode and logic
и в случае URL использовать завиток.
чтобы ответить и помочь вам, давайте попробуем посмотреть, есть ли у вас какие-либо ошибки от curl...
измените такой код и обновите нас
попробуйте использовать curl_error и проверьте, нет ли ошибок от cUrl,
то, что вы получаете?
$url = "data.json" ;
$ch = curl_init() ;
curl_setopt($ch, CURLOPT_URL, $url) ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if (curl_error($ch)) {
$error_msg = curl_error($ch);
}
curl_close($ch) ;
if (isset($error_msg)) {
// TODO - Handle cURL error accordingly
}
// put here your json decode and logic
Я понял, что я делаю неправильно. Когда я добавляю полный URL-адрес в $url . Я могу получить данные. Но знаете ли вы причину, почему?
я пытаюсь помочь... сначала проверьте, что за ошибки... а потом мы обновим и продолжим помогать вам
Спасибо за помощь . Я не минусовал твой ответ. но может быть ваша причина верна. Использование завитка, когда это необходимо, является лучшей практикой.
Пожалуйста, попробуйте это, и давайте продолжим разбираться. и вы можете проголосовать :)
Я проголосовал, но мои голоса не учитываются. Позвольте мне попробовать этот пример
Вы должны указать полный URL-адрес файла JSON, если вы используете CURL вместо data.json
http://localhost/text.json
другие варианты получения данных из json
$result = file_get_contents($url);
У меня работает нормально. Пожалуйста, проверьте.
<?php
$url = "http://raveesh.rnd/data.json" ;
$ch = curl_init() ;
curl_setopt($ch, CURLOPT_URL, $url) ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch) ;
$data = json_decode($result, true) ;
foreach($data as $mydata)
{
$data1 = $mydata["value"] ;
$data2 = $mydata["date"] ;
echo $data1 ." : ". $data2 ;
echo "<br/>";
}
?>
Output:
23 : 03/2018
43 : 03/2019
34 : 12/2017
13 : 01/2019
34 : 02/2019
Проблема вот в чем:
1- вы не можете скручивать один и тот же хост, вы должны использовать функцию file_get_content(), чтобы получить свой json, например:
<?php
$string = file_get_contents("./data.json");
$data = json_decode($string, true);
foreach($data as $mydata)
{
$data1 = $mydata["value"] ;
$data2 = $mydata["date"] ;
echo $data1 ." : ". $data2 ;
echo "<br/>";
}если вы хотите использовать curl , это должен быть другой хост, например:
<?php
$url = "http://date.jsontest.com" ;
$ch = curl_init($url) ;
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array('Content-type: application/json')
);
curl_setopt_array( $ch, $options );
$result = curl_exec($ch);
curl_close($ch) ;
$result = json_decode($result, 1);
foreach($result as $key => $mydata)
{
echo $key ." : ". $mydata ;
echo "<br/>";
}так что это зависит от структуры вашего Json
Спасибо
Вы получаете данные в $data?