我有一些xml,这是它的简单版本。
<xml>
<items>
<item abc="123">item one</item>
<item abc="456">item two</item>
</items>
</xml>
在内容上使用SimpleXML,
$obj = simplexml_load_string( $xml );
我可以使用$obj->xpath( '//items/item' );
并访问@attributes。
我需要一个数组结果,所以我尝试了这个json_decode(json_encode($obj),true)
技巧,但这看起来是要删除对@attributes的访问(即abc
=“ 123”)。
还有另一种方法可以提供对属性的访问并使我留下一个数组吗?
您可以使用json_encode
和一起走,json_decode
并可以添加缺少的内容,因为json_encode
-ing使用遵循某些特定规则SimpleXMLElement
。
如果您对规则及其详细信息感兴趣,我已经写了两篇关于它的博客文章:
对于您来说,也许更有趣的是第三部分,它显示了如何修改json序列化并提供您自己的格式(例如,保留属性):
它附带了完整的示例,下面是代码摘录:
$xml = '<xml>
<items>
<item abc="123">item one</item>
<item abc="456">item two</item>
</items>
</xml>';
$obj = simplexml_load_string($xml, 'JsonXMLElement');
echo $json = json_encode($obj, JSON_PRETTY_PRINT), "\n";
print_r(json_decode($json, TRUE));
JSON和数组的输出如下,请注意,属性是其中的一部分:
{
"items": {
"item": [
{
"@attributes": {
"abc": "123"
},
"@text": "item one"
},
{
"@attributes": {
"abc": "456"
},
"@text": "item two"
}
]
}
}
Array
(
[items] => Array
(
[item] => Array
(
[0] => Array
(
[@attributes] => Array
(
[abc] => 123
)
[@text] => item one
)
[1] => Array
(
[@attributes] => Array
(
[abc] => 456
)
[@text] => item two
)
)
)
)
问题内容: 我正在编写脚本以自动生成演示数据,并且需要在JSON中序列化一些数据。该数据的一部分是图像,因此我在base64中对其进行了编码,但是当我尝试运行脚本时,我得到了: 据我所知,无论使用base64编码的任何内容(在这种情况下,都是PNG图像)都只是一个字符串,因此它应该对序列化造成问题。我想念什么? 问题答案: 您必须注意数据类型。 如果读取二进制图像,则会得到字节。如果将这些字节编码
有没有一种方法可以正确地反序列化以双引号开头和结尾的JSON字符串? 数据以流的形式输入(来自AWS S3对象)。这是流的内容(注意开头和结尾的双引号字符): JsonSerializer似乎没有正确地反序列化它。但是,对于以下内容,其工作原理与预期一致: 以下是片段:
问题内容: 所以我需要用PHP编码数组并将其以纯文本格式存储在MySQL数据库中,我的问题是我应该使用serialize()还是json_encode()?它们各自的优缺点是什么? 我认为他们中的任何一个都会在这种情况下这样做。但是,您想要哪一个,为什么呢?如果用于数组以外的东西? 问题答案: 的主要优点:它特定于PHP,这意味着 它可以表示PHP类型 ,包括您自己的类的实例- 并且在反序列化数据
问题内容: 我正在使用JSON中的Google Geocode响应。 JSON格式如下: 我正在尝试使用Java创建序列化和反序列化它们。我尝试了GSON,但是因为它无法在更深层次上反序列化对象,所以GSON将不是一个选择。 我只是想知道是否有人对此主题有经验?也许您尝试过可以解决此问题的库?一些示例代码会很棒。 我真的不想为此编写自己的API … 问题答案: 使用杰克逊
问题内容: 我在Web API项目中使用了Dictionary,该项目的序列化方式类似于JSON: 因为我有重复的键,所以我不能再使用Dictionary类型,而现在我正在使用 但这是以这种方式序列化的: 有没有办法像字典一样进行序列化? 谢谢。 问题答案: 如果您使用Newtonsoft Json.NET库,则可以执行以下操作。 定义一个转换器,以所需的方式写入键/值对的列表: 然后使用转换器:
问题内容: JSON序列化自定义非序列化对象的常规方法是子类化,然后将自定义编码器传递给转储。 通常看起来像这样: 我想做的是使默认编码器可序列化的东西。我环顾四周,但找不到任何东西。我的想法是,编码器将在某些字段中确定json编码。类似的东西。也许是一个领域。python中是否有类似的东西? 我想使我正在制作的模块的一类可以对使用该包的每个人进行JSON序列化,而无需他们担心实现自己的[琐碎]自