【问题标题】:working with JSON in php在 php 中使用 JSON
【发布时间】:2013-05-27 18:52:47
【问题描述】:

我在从 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>";
?>

以上是我正在使用的 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

}

我的问题是它一次加载所有数据,我只想回显每个 我没有使用 JSON 的经验,所以我不知道要回显的变量

可以通过 JSON 访问

JSON Version : http://api.erpk.org/citizen/profile/3121752.json?key=Yn3AsG80
XML Version : http://api.erpk.org/citizen/profile/3121752.xml?key=Yn3AsG80

我想要达到的目标如下:

  1. 在没有输出的情况下加载 JSON 或 XML,以便我可以使用 ECHO 将数据放在我希望它在 PHP 文件中显示的位置;
  2. ECHO 每个 JSON 或 XML 数据。

每次我尝试都会收到一个错误,说它不是对象

【问题讨论】:

  • json_decode($json, true) 返回一个普通数组,它不是特定于 json 的,您可以像访问其他数组一样访问它的元素,例如var_dump($data['name'])
  • 我认为你的前两行应该压缩到$json = file_get_contents("http://api.erpk.org/citizen/profile/3121752.json?key=Yn3AsG80");

标签: php xml json


【解决方案1】:

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

$data = json_decode($json, true);
var_dump($data['name']);

如果您想获取对象,请删除第二个参数:

$data = json_decode($json);
var_dump($data->name);

【讨论】:

  • 这仍然不起作用我收到以下错误|注意:试图获取非对象的属性
  • 你能给我一个例子,说明使用我的问题应该是什么样子
【解决方案2】:

你误用了file_get_contents,所以我猜这是你的问题。要从该 URL 获取数据,只需使用该 URL 的第一行:

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

不管怎样,这里有一个code snippet,可以根据您的 JSON 数据集回显一个简短的配置文件。

它向您展示了如何访问第一级字段,如 namebirth,第二级为 rank\levelrank\name,最后是一组动态字段,如 medals

<?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

【讨论】:

  • 这一切都很好,但我有 1 个问题,json 每 1 小时更新一次,所以我不能继续更新 $json = ,那部分可以解决吗?
猜你喜欢
  • 2018-01-20
  • 2014-12-17
  • 2014-09-19
  • 1970-01-01
  • 2021-02-17
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
相关资源
最近更新 更多