按 ID 而非值获取 JSON 组名称

Get JSON Group Name By ID, Not Value

我有一个像这样的有效 JSON 文件:

{
    "default": {
        "key_value": "Default Value"
    },
    "test": {
        "key_value": "Test Value"
    }
}

我想获取字符串形式的组名:"default" 和 "test"。 我知道我可以使用类似的东西:

{
    "general": {
        "id": "default",
        "key_value": "Default Value"
    },
    {
        "id": "test",
        "key_value": "Test Value"
    }
}

但是由于我的JSON是有效的并且我的读取和保存文件的功能已经可以正常工作,所以我想用原来的结构来实现这个。

为了实验,我得到了类似的东西:

$json = file_get_contents("file.json");
$json_data = json_decode($json, true); // I guess assoc must be true?
foreach ($json_data as $item) } // My hope was that i am able to read $item, however it is an array
    echo $item["key_value"]."<br />"; // That gives me "Default Value" and "Test Value", so thats at least something
}

我猜 "default" 和 "test" 在 json 的第一个数组内? 现在我需要找到一种方法来读取它们并将它们保存为字符串。 foreach 不会那么错,因为如果添加了像 "test2" 这样的组,我也想阅读它。

我正在与未定义和非法的偏移量作斗争(因为我不能使用数组作为键?)。

因为我得到的值是这样的:

$json_data["default"]["key_value"]

我认为 $json_data[0] 应该是 "default"。 显然,这也是一个数组吧?我已经在论坛中四处张望了,但不幸的是,没有人拥有相同的 JSON 结构,因为他们的问题已得到解决。 也许像这样使用它只是愚蠢,但必须有一种方法让它正常工作? 可能它也只有 3 行代码,我现在还没有到达那里......我已经尝试了很多。

也许你们可以帮助我。

我想你想要的是这个:

foreach($json_data as $key=>$value) {
    echo $key, "<br />\n";
}

如果你想要更好一点,你可以使用array_keys():

foreach(array_keys($json_data) as $key) {
    echo $key, "<br />\n";
}

你必须尝试这个循环:

foreach ($array as $key => $value) {
        // you could print here the key or value
    }