设置
我使用'file_get_contents'从URL中检索了一个JSON
字符串,然后使用`json_decode'解码它
$search_URL="http://abcdefg.com"
$json = file_get_contents($search_URL);
$obj = json_decode($json, true);
JSON代表Apache Solr
搜索响应:
{
"responseHeader":{
"status":0,
"QTime":3,
"params":{
"q":"zzzzzzz",
"wt":"json"
}
},
"response":{
"numFound":20690,
"start":0,
"docs":[
{
"title":"yyyyy-y-y-yyyyy-yy-y",
"author":"author 1, author 2, author 3",
"url":"https://yyyyy.com",
"id":yyyy,
"_version_":yyyyy
},
{
"title":"xxxx-x-x-xxxx-xxxx",
"author":"author 1, author 2",
"url":"https://xxxxx.com",
"id":xxxxx,
"_version_":xxxxxx
},
]
}
}
我基本上需要抓取author
数组中的每个docs[]
字段,用逗号分隔以获取新数组
$author_array = explode(", ", $author);
然后我需要调用另一个带有这些作者姓名的Web服务,这些服务名称将返回JSON.
我希望简单地将这个JSON插入我现有的JSON中并将其全部发送回来
问题
我需要修改我的JSON
,以便每个文档都包含这个新的JSON对象。我怎么能这样做?
{
"title":"xxxx-x-x-xxxx-xxxx",
"author":"author 1, author 2",
"url":"https://xxxxx.com",
"id":xxxxx,
"_version_":xxxxxx,
"authors":[
{
"name": "author1",
"id": "143"
},
{
"name": "author2",
"id": "72"
}
]
}
我的尝试
我尝试了一个更简单的版本,我只有一个作者名称数组
{
"title":"xxxx-x-x-xxxx-xxxx",
"author":"author 1, author 2",
"url":"https://xxxxx.com",
"id":xxxxx,
"_version_":xxxxxx,
"authors":[
"author1",
"author2"
]
}
我尝试了以下内容:
$response = $obj['response'];
$docs = $response['docs'];
foreach($docs as &$doc) {
$author = $doc['author'];
$authors_array = explode(" ,", $author);
$doc['authors'] = $authors_array;
}
由于未附加新数组,因此最终失败。
答案 0 :(得分:2)
分解作者字符串,在每个元素上调用API,创建所有这些结果的数组,然后将其放回到对象中。
我在foreach
中使用下面的引用,因此它可以直接修改文档元素。
foreach ($obj['response']['docs'] AS &$doc) {
$author_names = explode(',', $doc['author']);
$author_array = array_map('author_api', $author_names);
$doc['authors'] = $author_array;
}