【问题标题】:How to mearge two json files? [closed]如何合并两个json文件? [关闭]
【发布时间】:2015-06-24 14:47:56
【问题描述】:

相关问答here

第一个 json :

   if (empty($_GET['term'])) exit ; 
       $q = strtolower($_GET["term"]);
       if (get_magic_quotes_gpc()) $q = stripslashes($q);
          $files = array(); 
       foreach(glob('image/*.jpg*', GLOB_BRACE) as $key=>$file) { 
         $files[] = substr($file, 0, -4); }
          $files = array_unique($files); 
        $files = array_combine($files, $files);
          $result = array(); 
    foreach ($files as $key=>$value) { 
        if (strpos(strtolower($key), $q) !== false) { 
            array_push($result, 
            array("id"=>$value, "label"=>$key, 
                "value" => strip_tags($key))); }
          if (count($result) > 11) break; } 
     echo json_encode($result);

第二个json:

if (empty($_GET['term'])) exit ; 
   $q = strtolower($_GET["term"]);
   if (get_magic_quotes_gpc()) $q = stripslashes($q);
      $files = array(); 
   foreach(glob('image/*.txt*', GLOB_BRACE) as $key=>$file) { 
     $files[] = substr($file, 0, -4); }
      $files = array_unique($files); 
    $files = array_combine($files, $files);
      $result = array(); 
foreach ($files as $key=>$value) { 
    if (strpos(strtolower($key), $q) !== false) { 
        array_push($result, 
        array("id"=>$value, "label"=>$key, 
            "value" => strip_tags($key))); }
      if (count($result) > 11) break; } 
 echo json_encode($result);

如何合二为一?我有 2 个输入字段,第一个输入 json 只显示带有预览的图像文件名,第二个只显示文本文件名,那么如何将 json 文件集成到一个中?

【问题讨论】:

  • 您没有“php json”文件。没有这样的事情。你有两个输出 json 的 php 脚本......如果你想合并它们,然后组合公共代码并添加循环或“独特”东西所需的任何其他内容。

标签: php json


【解决方案1】:

假设您的代码 sn-ps 末尾有有效数据,我会将它们转换为数组,合并它们,然后重新编码为 json。

$json1 = '{"title" : [{"some data":"some more data"}]}';
$json2 = '{"title2" : [{"some data2":"some more data2"}]}';

$complete = array_merge(JSON_decode($json1, true), JSON_decode($json2, true));

$newJson = JSON_encode($complete);

heres a fiddle

【讨论】:

  • 你可以编辑你的代码作为我的例子吗?请…………
  • 你在每个 sn-p 的末尾创建 2 个数组,在编码为 JSON 之前先合并它们
  • 实际上我有 2 个输入并且 json 有问题,因为第一个输入只显示带有预览的图像文件名,第二个只显示文本文件名,那么如何将 json 文件集成到一个中? @马特HB
【解决方案2】:

比较您的两个文件,这应该是您想要做的(假设您只想运行一个文件来输出 JSON 响应)。

<?php
if (empty($_GET['term'])) exit;

$q = strtolower($_GET["term"]);

if (get_magic_quotes_gpc()) $q = stripslashes($q);

$files = array();

foreach(glob('image/*.jpg*', GLOB_BRACE) as $key=>$file) {
    $files[] = substr($file, 0, -4);
}
foreach(glob('image/*.txt*', GLOB_BRACE) as $key=>$file) {
    $files[] = substr($file, 0, -4);
}

$files = array_unique($files);
$files = array_combine($files, $files);

$result = array();

foreach ($files as $key=>$value) {
    if (strpos(strtolower($key), $q) !== false) {
        array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key)));
    }
    if (count($result) > 11) break;
}

echo json_encode($result);

基于您的评论的第二个解决方案:

<?php
if (empty($_GET['term']) || empty($_GET['term2'])) exit;

$q = strtolower($_GET["term"]);
$q2 = strtolower($_GET["term2"]);

if (get_magic_quotes_gpc()) $q = stripslashes($q);

$files = array();
$files2 = array();

foreach(glob('image/*.jpg*', GLOB_BRACE) as $key=>$file) {
    $files[] = substr($file, 0, -4);
}
foreach(glob('image/*.txt*', GLOB_BRACE) as $key=>$file) {
    $files2[] = substr($file, 0, -4);
}

$files = array_unique($files);
$files = array_combine($files, $files);
$files2 = array_unique($files2);
$files2 = array_combine($files2, $files2);

$result = array();
foreach ($files as $key=>$value) {
    if (strpos(strtolower($key), $q) !== false) {
        array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key)));
    }
    if (count($result) > 11) break;
}
foreach ($files2 as $key=>$value) {
    if (strpos(strtolower($key), $q2) !== false) {
        array_push($result, array("id"=>$value, "label"=>$key, "value" => strip_tags($key)));
    }
    if (count($result) > 11) break;
}

echo json_encode($result);

【讨论】:

  • 实际上我有 2 个输入并且 json 有问题,因为第一个输入只显示带有预览的图像文件名,第二个只显示文本文件名,那么如何将 json 文件集成到一个中? @丹尼
  • 请查看第二种解决方案,看看这是否适合您
  • 你看到了吗?是否可以为来自同一来源的 2 个输入显示不同的值?
  • 看看您在上面分享的链接上发布的答案
【解决方案3】:

如果您不想更改上面的 2 个脚本,您可以执行以下操作:

<?php

$script1_path = 'http://path/to/your/first/script.php';
$script2_path = 'http://path/to/your/second/script.php';

$json1 = file_get_contents($script1_path.'?term=hello');
$result1 = json_decode($json1);

$json2 = file_get_contents($script2_path.'?term=world');
$result2 = json_decode($json2);

$merged_result = array_merge($result1, $result2);
echo json_encode($merged_result);

?>

警告:根据您服务器的配置,可能不允许 file_get_content 服务器加载 http 内容。

否则,最好的解决方案可能是更改架构以在一个 php 文件中生成 2 个数组:

$q1 = strtolower($_GET["term1"]);
...
$q2 = strtolower($_GET["term2"]);
...
echo json_encode($result);

【讨论】:

  • 如果两个文件中的搜索词相同,你应该使用@Danny Broadbent的解决方案。
  • 实际上我有 2 个输入并且 json 有问题,因为第一个输入只显示带有预览的图像文件名,第二个只显示文本文件名,那么如何将 json 文件集成到一个中? @乔纳斯
  • 如果你搜索一个名字的图像文件和另一个名字的文本文件,我的第一个建议是快速而肮脏的方式(更新)
  • 为什么要合并2个jsons?
猜你喜欢
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
  • 2015-02-08
  • 2017-07-02
  • 2014-08-29
  • 1970-01-01
相关资源
最近更新 更多