ronolo / json-query
一个JSON点符号解析器,用于访问值。例如:persons.2.hobby
1.2.2
2020-10-10 06:08 UTC
Requires
- php: >= 7.2
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^8.4
README
此库可用于使用文档数据库(如MongoDB、CouchDB)的属性查询语法访问JSON数据。
它不是类似于点符号的方法来处理数组结构。据我所知,它需要JSON数组/对象结构才能那样工作。
安装
composer require ronolo/json-query
用法
use RoNoLo\JsonQuery; $q = JsonQuery::fromFile('data.json'); // or ... $q = JsonQuery::fromData(['foo' => 1, 'bar' => 2]); // or ... $q = JsonQuery::fromJson('{"foo": "bernd", "bar": "kitty"}'); $result = $q->query('foo'); // or ... $result = $q->query('foo.bar'); // or ... $result = $q->query('foo.2.bar'); // or ... $result = $q->query('foo.2.bar.0.name'); // or ... $result = $q->query('foo.bar.name'); // etc.
示例
请检查PhpUnit测试,以找到更多示例。
{
"de": "Deutschland", "en": "Germany", "es": "Alemania", "fr": "Allemagne",
"it": "Germania", "ja": "\u30c9\u30a4\u30c4", "nl": "Duitsland",
"altSpellings": ["DE", "Federal Republic of Germany", "Bundesrepublik Deutschland"],
"population": 80523700,
"latlng": [51, 9],
"persons": [
{
"name": "Karl",
"hobby": [
{
"type": "Cars",
"examples": [
{"name": "Honda"},
{"name": "Porsche", "build": ["1962", "1976", "2010"]},
{"name": "Mercedes"}
]
},
{
"type": "Planes",
"examples": [{"name": "Concorde"}, {"name": "Airbus"}, {"name": "Tupolev"}]
},
{
"type": "Music",
"examples": [{"name": "Rock"}, {"name": "Pop"}, {"name": "Funk"}]
}
]
},
{
"name": "Jenni",
"hobby": [
{
"type": "Comics",
"examples": [{"name": "Duffy Duck"}, {"name": "Batman"}, {"name": "Superman"}]
},
{
"type": "Dancing",
"examples": [{"name": "Walzer"}, {"name": "Shuffle"}]
}
]
}
]
}
use RoNoLo\JsonQuery; $q = JsonQuery::fromFile('data.json'); $result = $q->query('population'); // 80523700 $result = $q->query('bernd'); // ValueNotFound() $result = $q->query('persons.name'); // ["Karl", "Jenni"] $result = $q->query('persons.1.name'); // "Jenni" $result = $q->query('latlng'); // [51, 9] $result = $q->query('latlng.0'); // 51 $result = $q->query('persons.hobby.type'); // [["Cars", "Planes", "Music"],["Comics","Dancing"]]
限制
由于多维数组的性质,非常深入结构的问题可能以多维数组的形式返回。请参见使用'persons.hobby.type'作为查询的PhpUnit示例。