Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中使用JSON_Php_Xml_Json - Fatal编程技术网

在php中使用JSON

在php中使用JSON,php,xml,json,Php,Xml,Json,我在回显JSON文件中的数据时遇到问题: <?php $url = file_get_contents("http://api.erpk.org/citizen/profile/3121752.json?key=Yn3AsG80"); $json = file_get_contents($url); $data = json_decode($json, true); echo "<pre>"; var_dump($data); echo"</pre>"; ?>

我在回显JSON文件中的数据时遇到问题:

<?php
$url = file_get_contents("http://api.erpk.org/citizen/profile/3121752.json?key=Yn3AsG80");
$json = file_get_contents($url);
$data = json_decode($json, true);
echo "<pre>"; var_dump($data); echo"</pre>";
?>
我的问题是它一次加载所有数据,我只想回显每个数据 我没有使用JSON的经验,所以我不知道要回显哪些变量

通过您可以访问的JSON访问

$data = json_decode($json, true);
var_dump($data['name']);
我希望实现以下目标:

  • 加载不带输出的JSON或XML,以便我可以使用ECHO将数据放在PHP文件中希望显示的位置
  • 回显每个JSON或XML数据
  • 每次尝试时,我都会收到一个错误,表明它是一个非对象

    json\u decode($json,true)
    返回一个普通数组,它不是特定于json的,您可以像访问其他数组一样访问它的元素:

    $data = json_decode($json);
    var_dump($data->name);
    
    如果要获取对象,请删除第二个参数:

    $url = 'http://api.erpk.org/citizen/profile/3121752.json?key=Yn3AsG80';
    

    你误用了
    文件获取内容,所以我猜这就是你的问题所在。要从该URL获取数据,请仅使用此URL的第一行:

    <?php
    $json = '{"id":3121752,"name":"SnowderBlazer","birth":"2010-04-10","avatar":"http://static.erepublik.net/uploads/avatars/Citizens/2010/04/10/4bb9a72cc291faaaf7af8e78ed0a8509_100x100.jpg","online":false,"ban":null,"alive":true,"level":97,"experience":360391,"strength":42859.62,"rank":{"points":437120237,"level":64,"image":"http://www.erepublik.com/images/modules/ranks/god_of_war_2.png","name":"God of War**"},"elite_citizen":false,"national_rank":1,"residence":{"country":{"id":65,"name":"Serbia","code":"RS"},"region":{"id":198,"name":"Midi-Pyrenees"}},"citizenship":{"id":65,"name":"Serbia","code":"RS"},"about":"Voters Club Moderator\ncatch me on #voters @Rizon\nIRC Nick : Snowderblazer OR Snowderblazer[BNC]\norder herehttp://erepublik-market.com/voters/newOrder.html?adp=1549866\n[ident:9vrwQZB9]","party":{"id":2479,"name":"Ujedinjena eSrbija","role":"Party Member"},"army":{"id":1980,"name":"Legija Stranaca Elite","role":"Commander","created_at":"2012-05-26","avatar":"http://static.erepublik.net/uploads/avatars/Groups/2012/05/26/f80bf05527157a8c2a7bb63b22f49aaa_medium.jpg","rank":"Commander"},"newspaper":{"id":241367,"role":"Press director","name":"M.A.D.S News"},"top_damage":{"damage":215238312,"date":"2013-05-16","message":"Achieved while successfully defending Basilicata against Italy on day 2,004"},"true_patriot":{"damage":3021790429,"since":"2012-04-26"},"medals":{"battle_hero":248,"campaign_hero":98,"congress_member":9,"country_president":0,"hard_worker":36,"media_mogul":5,"mercenary":1,"resistance_hero":2,"society_builder":0,"super_soldier":171,"top_fighter":3,"true_patriot":43},"hit":14924}';
    
    $data = json_decode($json, true);
    
    echo "Name: {$data['name']}\n";
    echo "Date of birth: {$data['birth']}\n\n";
    
    echo "Level: {$data['rank']['level']}\n";
    echo "Rank: {$data['rank']['name']}\n\n";
    
    echo "Medals\n";
    foreach ($data['medals'] as $medalName => $number) {
        echo ucfirst(str_replace('_', ' ', $medalName)) . ": {$number}\n";
    }
    
    无论如何,这里有一个简单的例子来回应给定JSON数据集的简短概要

    它显示了如何访问第一级字段,如
    name
    birth
    ,第二级字段为
    rank\level
    rank\name
    ,最后是一组动态字段,如
    奖牌

    Name: SnowderBlazer
    Date of birth: 2010-04-10
    
    Level: 64
    Rank: God of War**
    
    Medals
    Battle hero: 248
    Campaign hero: 98
    Congress member: 9
    Country president: 0
    Hard worker: 36
    Media mogul: 5
    Mercenary: 1
    Resistance hero: 2
    Society builder: 0
    Super soldier: 171
    Top fighter: 3
    True patriot: 43
    

    json\u decode($json,true)
    返回一个普通数组,它不是特定于json的,您可以像访问其他数组一样访问它的元素,例如
    var\u dump($data['name'])
    我认为前两行应该压缩为
    $json=file\u get\u contents(“http://api.erpk.org/citizen/profile/3121752.json?key=Yn3AsG80");这仍然不起作用我得到了以下错误|注意:尝试获取非object属性你能给我一个使用我的问题的例子吗?这一切都很好而且有效,但我有一个问题,json每1小时更新一次,所以我不能继续更新$json=,这部分可以解决吗?
    
    <?php
    $json = '{"id":3121752,"name":"SnowderBlazer","birth":"2010-04-10","avatar":"http://static.erepublik.net/uploads/avatars/Citizens/2010/04/10/4bb9a72cc291faaaf7af8e78ed0a8509_100x100.jpg","online":false,"ban":null,"alive":true,"level":97,"experience":360391,"strength":42859.62,"rank":{"points":437120237,"level":64,"image":"http://www.erepublik.com/images/modules/ranks/god_of_war_2.png","name":"God of War**"},"elite_citizen":false,"national_rank":1,"residence":{"country":{"id":65,"name":"Serbia","code":"RS"},"region":{"id":198,"name":"Midi-Pyrenees"}},"citizenship":{"id":65,"name":"Serbia","code":"RS"},"about":"Voters Club Moderator\ncatch me on #voters @Rizon\nIRC Nick : Snowderblazer OR Snowderblazer[BNC]\norder herehttp://erepublik-market.com/voters/newOrder.html?adp=1549866\n[ident:9vrwQZB9]","party":{"id":2479,"name":"Ujedinjena eSrbija","role":"Party Member"},"army":{"id":1980,"name":"Legija Stranaca Elite","role":"Commander","created_at":"2012-05-26","avatar":"http://static.erepublik.net/uploads/avatars/Groups/2012/05/26/f80bf05527157a8c2a7bb63b22f49aaa_medium.jpg","rank":"Commander"},"newspaper":{"id":241367,"role":"Press director","name":"M.A.D.S News"},"top_damage":{"damage":215238312,"date":"2013-05-16","message":"Achieved while successfully defending Basilicata against Italy on day 2,004"},"true_patriot":{"damage":3021790429,"since":"2012-04-26"},"medals":{"battle_hero":248,"campaign_hero":98,"congress_member":9,"country_president":0,"hard_worker":36,"media_mogul":5,"mercenary":1,"resistance_hero":2,"society_builder":0,"super_soldier":171,"top_fighter":3,"true_patriot":43},"hit":14924}';
    
    $data = json_decode($json, true);
    
    echo "Name: {$data['name']}\n";
    echo "Date of birth: {$data['birth']}\n\n";
    
    echo "Level: {$data['rank']['level']}\n";
    echo "Rank: {$data['rank']['name']}\n\n";
    
    echo "Medals\n";
    foreach ($data['medals'] as $medalName => $number) {
        echo ucfirst(str_replace('_', ' ', $medalName)) . ": {$number}\n";
    }
    
    Name: SnowderBlazer
    Date of birth: 2010-04-10
    
    Level: 64
    Rank: God of War**
    
    Medals
    Battle hero: 248
    Campaign hero: 98
    Congress member: 9
    Country president: 0
    Hard worker: 36
    Media mogul: 5
    Mercenary: 1
    Resistance hero: 2
    Society builder: 0
    Super soldier: 171
    Top fighter: 3
    True patriot: 43