carica/jsondom

将 JSON 读取到 DOM 中

dev-master 2014-02-18 09:17 UTC

This package is auto-updated.

Last update: 2024-08-29 04:14:21 UTC


README

许可证: MIT 许可证

版权: 2013-2014 Thomas Weinert thomas@weinert.info

Carica JsonDOM 将 JSON 转换为 XML DOM。生成的 XML 格式正确,并在单独的命名空间中包含额外的 JSON 特定数据。

为什么不直接使用 JSON 呢?

因为这需要做大量的工作。你需要检查元素是否存在、列表是否为空、检查条件……如果可以使用查询语言,如 Xpath,会更容易。

示例

使用 Xpath 从 JSON 中获取数据

<?php
$reader = new Carica\JsonDOM\Reader($json);
$xpath = new DOMXpath($reader->asDom());
var_dump(
  $xpath->evaluate('string(/*/phoneNumbers/*[type="home"]/number)')
);
// string(12) "212 555-1234"

JSON (来自 维基百科)

{
  "firstName": "John",
  "lastName": "Smith",
  "age": 25,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": 10021
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "fax",
      "number": "646 555-4567"
    }
  ]
}

XML

<?xml version="1.0" encoding="UTF-8"?>
<json:json xmlns:json="urn:carica-json-dom.2013">
  <firstName>John</firstName>
  <lastName>Smith</lastName>
  <age json:type="number">25</age>
  <address>
    <streetAddress>21 2nd Street</streetAddress>
    <city>New York</city>
    <state>NY</state>
    <postalCode json:type="number">10021</postalCode>
  </address>
  <phoneNumbers json:type="array">
    <_>
      <type>home</type>
      <number>212 555-1234</number>
    </_>
    <_>
      <type>fax</type>
      <number>646 555-4567</number>
    </_>
  </phoneNumbers>
</json:json>

从 XML 创建 JSON

你可以将其转换回来,或者从任何 XML DOM 生成 JSON。节点属性将被忽略,重复的键将覆盖之前的键。

<?php
echo 'XML -> JSON: ', "\n";
$writer = new Carica\JsonDOM\Writer($dom);
echo json_encode($writer, JSON_PRETTY_PRINT);

安装

Carica JsonDOM 可在 Packagist 上找到。使用 Composer 将其添加到您自己的项目中的依赖项。