我正试图提出一种简单的方法,用于从多个json数据源中提取数据,其中,引用存储在字符串文字中。当对象结构已知时,这很容易做到,但是有什么方法可以使php像直接在代码中那样解释字符串文字吗?
$data = json_decode('
{
"foo": 1,
"object": {
"foo": 1.1,
"bar": 1.2
},
"array": [
"foo",
"bar"
]
}
');
// Explicitly coded reference all work, of course
var_dump($data->foo); // int(1)
var_dump($data->object->foo); // float(1.1)
var_dump($data->array[0]); // string(3) "foo"
我知道我可以从这样的字符串文字访问对象的属性:
$string = 'foo';
var_dump($data->$string); // int(1)
var_dump($data->object->$string); // float(1.1)
是否有任何方法可以实现第二个和第三个引用,而不必分解字符串并递归遍历对象直到找到每个元素?
$string = 'object->foo';
var_dump($data->$string);
$string = 'array[0]';
var_dump($data->$string);
如果PHP本身没有东西可以处理,是否有一个库或我可以用来简化此过程的任何东西?
编辑:为了提供更多的信息,此应用程序可以通过UI配置JSON提要,并且管理员可以从JSON提要中提取值。对于更简单的JSON结构,此方法效果很好,但在尝试提取诸如$foo->bar->baz[0]->qux->corge
之类的值时会失效。我试图找到一种更简单的方法来在结构更改时获取诸如此类的值,而我无法说明代码中的所有可能性。
答案 0 :(得分:1)
由于您使用的是JSON,因此我将使用JSON指针。 Here is their official spec
他们所做的是为json对象提供查询语言(类似于XPath for XML)。在foo
中访问您的object
将导致类似/object/foo
的查询。
现在,您要让用户指定json指针查询,并使用json pointer library执行实际查询。这样做的好处是,如果您决定放弃PHP而使用Java,则只需为Java使用JSON指针实现,并且您的用户不会受到更改的影响。