首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >基于字符串分割成数组的多组json对象

基于字符串分割成数组的多组json对象
EN

Stack Overflow用户
提问于 2014-03-04 13:37:42
回答 1查看 341关注 0票数 0

我有个奇怪的问题要问,我很难把头绕在上面。但基本上我有一条json字符串:

代码语言:javascript
运行
AI代码解释
复制
{
  "001-file":{
    "filename":"001 - file",
    "slugify":"001-file",
    "size":{
      "mb":60.4,
      "text":"60.4 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder3/"
  },
  "002-file":{
    "filename":"002 - file",
    "slugify":"002-file",
    "size":{
      "mb":60.2,
      "text":"60.2 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder3/"
  },
  "003-file":{
    "filename":"003 - file",
    "slugify":"003-file",
    "size":{
      "mb":60.2,
      "text":"60.2 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder3/"
  },
  "004-file":{
    "filename":"004 - file",
    "slugify":"004-file",
    "size":{
      "mb":60.2,
      "text":"60.2 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder3/"
  },
  "005-file":{
    "filename":"005 - file",
    "slugify":"005-file",
    "size":{
      "mb":60.3,
      "text":"60.3 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder4/"
  },
  "006-file":{
    "filename":"006 - file",
    "slugify":"006-file",
    "size":{
      "mb":60.2,
      "text":"60.2 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder4/"
  },
  "007-file":{
    "filename":"007 - file",
    "slugify":"007-file",
    "size":{
      "mb":60.2,
      "text":"60.2 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder4/"
  },
  "008-file":{
    "filename":"008 - file",
    "slugify":"008-file",
    "size":{
      "mb":60.3,
      "text":"60.3 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder4/"
  },
  "009-file":{
    "filename":"009 - file",
    "slugify":"009-file",
    "size":{
      "mb":60.1,
      "text":"60.1 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder4/"
  },
  "010-file":{
    "filename":"010 - file",
    "slugify":"010-file",
    "size":{
      "mb":60.1,
      "text":"60.1 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder4/"
  },
  "011-file":{
    "filename":"011 - file",
    "slugify":"011-file",
    "size":{
      "mb":60.1,
      "text":"60.1 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder5/"
  },
  "012-file":{
    "filename":"012 - file",
    "slugify":"012-file",
    "size":{
      "mb":60.2,
      "text":"60.2 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder5/"
  },
  "013-file":{
    "filename":"013 - file",
    "slugify":"013-file",
    "size":{
      "mb":60,
      "text":"60.0 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder5/"
  },
  "014-file":{
    "filename":"014 - file",
    "slugify":"014-file",
    "size":{
      "mb":59.7,
      "text":"59.7 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder5/"
  },
  "015-file":{
    "filename":"015 - file",
    "slugify":"015-file",
    "size":{
      "mb":59.9,
      "text":"59.9 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder5/"
  },
  "016-file":{
    "filename":"016 - file",
    "slugify":"016-file",
    "size":{
      "mb":56.5,
      "text":"56.5 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder5/"
  },
  "017-file":{
    "filename":"017 - file",
    "slugify":"017-file",
    "size":{
      "mb":56.3,
      "text":"56.3 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder5/"
  },
  "018-file":{
    "filename":"018 - file",
    "slugify":"018-file",
    "size":{
      "mb":56.4,
      "text":"56.4 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder6/"
  },
  "019-file":{
    "filename":"019 - file",
    "slugify":"019-file",
    "size":{
      "mb":56.5,
      "text":"56.5 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder6/"
  },
  "020-file":{
    "filename":"020 - file",
    "slugify":"020-file",
    "size":{
      "mb":56.5,
      "text":"56.5 MB"
    },
    "directory":"file:///E:/Folder1/Folder2/Folder6/"
  }
}

我需要根据目录进行分组。分组所有E:,然后分组所有Folder1,然后是Folder2,然后是Folder3 or Folder4 or Folder5

下面是我期待得到的一个例子:

代码语言:javascript
运行
AI代码解释
复制
{
  "E:":{
    "Folder1":{
      "Folder2":{
        "Folder3":{
          "001-file":{
            "filename":"001 - file",
            "slugify":"001-file",
            "size":{
              "mb":60.4,
              "text":"60.4 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder3/"
          },
          "002-file":{
            "filename":"002 - file",
            "slugify":"002-file",
            "size":{
              "mb":60.2,
              "text":"60.2 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder3/"
          },
          "003-file":{
            "filename":"003 - file",
            "slugify":"003-file",
            "size":{
              "mb":60.2,
              "text":"60.2 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder3/"
          },
          "004-file":{
            "filename":"004 - file",
            "slugify":"004-file",
            "size":{
              "mb":60.2,
              "text":"60.2 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder3/"
          }
        },
        "Folder4":{
          "005-file":{
            "filename":"005 - file",
            "slugify":"005-file",
            "size":{
              "mb":60.3,
              "text":"60.3 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder4/"
          },
          "006-file":{
            "filename":"006 - file",
            "slugify":"006-file",
            "size":{
              "mb":60.2,
              "text":"60.2 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder4/"
          },
          "007-file":{
            "filename":"007 - file",
            "slugify":"007-file",
            "size":{
              "mb":60.2,
              "text":"60.2 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder4/"
          },
          "008-file":{
            "filename":"008 - file",
            "slugify":"008-file",
            "size":{
              "mb":60.3,
              "text":"60.3 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder4/"
          },
          "009-file":{
            "filename":"009 - file",
            "slugify":"009-file",
            "size":{
              "mb":60.1,
              "text":"60.1 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder4/"
          },
          "010-file":{
            "filename":"010 - file",
            "slugify":"010-file",
            "size":{
              "mb":60.1,
              "text":"60.1 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder4/"
          }
        },
        "Folder5":{
          "011-file":{
            "filename":"011 - file",
            "slugify":"011-file",
            "size":{
              "mb":60.1,
              "text":"60.1 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder5/"
          },
          "012-file":{
            "filename":"012 - file",
            "slugify":"012-file",
            "size":{
              "mb":60.2,
              "text":"60.2 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder5/"
          },
          "013-file":{
            "filename":"013 - file",
            "slugify":"013-file",
            "size":{
              "mb":60,
              "text":"60.0 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder5/"
          },
          "014-file":{
            "filename":"014 - file",
            "slugify":"014-file",
            "size":{
              "mb":59.7,
              "text":"59.7 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder5/"
          },
          "015-file":{
            "filename":"015 - file",
            "slugify":"015-file",
            "size":{
              "mb":59.9,
              "text":"59.9 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder5/"
          },
          "016-file":{
            "filename":"016 - file",
            "slugify":"016-file",
            "size":{
              "mb":56.5,
              "text":"56.5 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder5/"
          },
          "017-file":{
            "filename":"017 - file",
            "slugify":"017-file",
            "size":{
              "mb":56.3,
              "text":"56.3 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder5/"
          }
        },
        "Folder6":{
          "018-file":{
            "filename":"018 - file",
            "slugify":"018-file",
            "size":{
              "mb":56.4,
              "text":"56.4 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder6/"
          },
          "019-file":{
            "filename":"019 - file",
            "slugify":"019-file",
            "size":{
              "mb":56.5,
              "text":"56.5 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder6/"
          },
          "020-file":{
            "filename":"020 - file",
            "slugify":"020-file",
            "size":{
              "mb":56.5,
              "text":"56.5 MB"
            },
            "directory":"file:///E:/Folder1/Folder2/Folder6/"
          }
        }
      }
    }
  }
}

有人能给我指点我要去的方向吗?

这只是一个例子,真正的场景可以有不同的文件夹结构和大约1000个对象。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-04 14:09:22

我把你安排好了。您可能会找到方法来重构它,使其更有效率,更适合您的需要,但这做了您想要的。注释解释了每个代码块的用途。

代码语言:javascript
运行
AI代码解释
复制
<?php

// new array
$new_array = array();


// orginal json string
$orig_json = '{"001-file":{"filename":"001 - file","slugify":"001-file","size":{"mb":60.4,"text":"60.4 MB"},"directory":"file:///E:/Folder1/Folder2/Folder3/"},"002-file":{"filename":"002 - file","slugify":"002-file","size":{"mb":60.2,"text":"60.2 MB"},"directory":"file:///E:/Folder1/Folder4/Folder5/"}}';

echo $orig_json.'<br/>';


// convert to array
$orig_array = json_decode($orig_json, true);
//view json as array
echo '<pre>';
print_r($orig_array);
echo '</pre>';


// loop through array
foreach( $orig_array as $file_key => $file ) {
   echo ('==========================================================================');
   // view current file array
   echo '<pre>';
   print_r($file);
   echo '</pre>';

   // convert directory string into array
   $directory_structure = explode('/',$file['directory']);
   echo '<pre>';
   print_r($directory_structure);
   echo '</pre>';

   // remove uncessary array items (file:, null entries)
   foreach( $directory_structure as $key => $d ) {
      if( $d == NULL || $d == 'file:') {
          unset($directory_structure[$key]);
      }
   }

   // view the pared down array
   echo '<pre>';
   print_r($directory_structure);
   echo '</pre>';

   // build directory based array structure
   $temp_array =& $new_array;
   foreach ($directory_structure as $d) {
     // check if key already exists
     if( !array_key_exists($d, $temp_array) ) {
        $temp_array[$d] = array();
     }
     // check if at end of directory structure (last "folder")
     if( end($directory_structure) == $d ) {
         $temp_array[$d][$file_key] = $file;
     }

     // append array
     $temp_array =& $temp_array[$d];
 } 

  echo "============================================================";
}

// view new directory array
echo '<pre>';
print_r($new_array);
echo '</pre>';

// json encode
$new_json = json_encode($new_array);

// view new json string
echo $new_json.'<br/>';
?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22183597

复制
相关文章
如何修复WordPress死亡白屏(WSoD)故障问题
您的WordPress网站是否曾突然遇到死亡白屏(WSoD),该错误会导致网站管理员和访客都无法访问您的网站。
开心分享
2020/08/05
3.5K0
如何修复WordPress死亡白屏(WSoD)故障问题
硬盘故障修复 原
近期公司一台服务器的磁盘告警“磁盘阵列错误”,经检查发现磁盘:“PD0/PD1/PD2 硬盘Medium Error DevId 并BadStripe PD0 PD1”,需要在服务器磁盘彻底崩溃之前进行raid修复,具体过程如下:
阿dai学长
2019/04/03
1.7K0
硬盘故障修复
                                                                            原
修复GRUB菜单故障实验
grub:启动菜单的背景图片和样式 grub2:启动菜单的配置文件 输入:cd ../grub2/进入此目录 输入:ls查看详细信息,看到其中有 grub.cfg的配置文件
拓荒者
2019/09/05
1.3K0
修复GRUB菜单故障实验
Greenplum集群故障修复小记
今天有一套环境因为网络调整,结果诺大的Greenplum集群,primary和mirror节点部分有了故障,假设有200个实例,100个segment,100个mirror,情况就是100个实例出现了问题(可能mirror已经宕机,可能mirror切换为primary,可能primary切换为mirror)刚好保证了100个实例能够正常承接业务。
jeanron100
2018/07/26
1.3K0
Greenplum集群故障修复小记
惠普服务器磁盘阵列配置及故障修复「建议收藏」
惠普服务器磁盘阵列配置Raid1/Raid0 惠普服务器磁盘阵列的设置是安装操作系统的先决条件。只有完成了磁盘阵列的设置才能正常使用。 HP DL388 Gen9系列,配两块HDD硬盘。步骤如下: https://jingyan.baidu.com/article/e3c78d64b7fff63c4c85f5ab.html
全栈程序员站长
2022/09/02
3.7K0
Newbe.Mahua CQP 紧急故障修复
由于 CQP 进行了命名规则改换,导致 SDK 全部失效,因此特别紧急修复发布版本。
newbe36524
2020/03/16
6080
primary label corrupt; using backup故障修复
Apr 22 11:00:51 host1 cmlb: [ID 107833 kern.warning] WARNING: /scsi_vhci/disk@g5000c50043ffa61f (sd5):
党志强
2020/02/11
9120
桌面白屏(Active故障)修复批处理
一年前我在做用户系统维护服务工作时发现 AD 域环境下,AD 用户桌面经常会出现壁纸无法显示,ActiveDesktop 桌面损坏之类的故障,当时从前人心得里学到的方法就是登入管理员,然后删除用户配置
张戈
2018/03/23
1.4K0
桌面白屏(Active故障)修复批处理
Elasticsearch 集群故障排查及修复指南
Elasticsearch 集群在运行的过程中,由于各种原因,经常会出现健康问题。比较直观的是:kibana监控、head插件监控显示集群非绿色(红色或者黄色)。
铭毅天下
2020/11/19
3.4K1
Elasticsearch 集群故障排查及修复指南
Linux 系统故障排查和修复技巧
我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动,我在这里写了几个应用单用户模式、GRUB命令操作、Linux救援模式的故障修复案例帮助大家了解此类问题的解决。
小小科
2018/07/31
5.6K0
Linux系统故障排查和修复技巧
我发现Linux系统在启动过程中会出现一些故障,导致系统无法正常启动,我在这里写了几个应用单用户模式、GRUB命令操作、Linux救援模式的故障修复案例帮助大家了解此类问题的解决。
PHP开发工程师
2022/06/25
3.1K0
服务器如何修复旧加密算法漏洞
大周末的,收到客户发来的《网络安全隐患告知书》,里面有个主机扫描报告,有个中危漏洞需要修复,客户修复不了,找过来,漏洞如下:
李俊鹏
2021/03/17
4.2K0
如何识别服务器连接的零星故障
这里有一个每个系统管理员都熟悉的情况。一个员工告诉你,他们不能使用某些网络服务。然而,他们不能给你任何具体的数据,例如他们无法访问哪个服务的确切时间,或者是否访问了相同的服务器连接。
虹科网络可视化与安全
2021/06/09
7280
如何识别服务器连接的零星故障
PrestaShop 网站漏洞修复如何修复
PrestaShop网站的漏洞越来越多,该网站系统是很多外贸网站在使用的一个开源系统,从之前的1.0初始版本到现在的1.7版本,经历了多次的升级,系统使用的人也越来越多,国内使用该系统的外贸公司也很多,PrestaShop扩展性较高,模板也多,多种货币自由切换,并支持信用卡以及paypal支付,是外贸网站的首选。就在最近几天,PrestaShop被爆出有远程代码注入漏洞,该漏洞影响范围较光,危害较大,可以上传webshell到网站根目录下。
网站安全专家
2019/07/24
4.2K0
PrestaShop 网站漏洞修复如何修复
PrestaShop网站的漏洞越来越多,该网站系统是很多外贸网站在使用的一个开源系统,从之前的1.0初始版本到现在的1.7版本,经历了多次的升级,系统使用的人也越来越多,国内使用该系统的外贸公司也很多,PrestaShop扩展性较高,模板也多,多种货币自由切换,并支持信用卡以及paypal支付,是外贸网站的首选。就在最近几天,PrestaShop被爆出有远程代码注入漏洞,该漏洞影响范围较光,危害较大,可以上传webshell到网站根目录下。
技术分享达人
2019/01/01
4.1K0
如何避免美国ASP主机服务器崩溃和故障?
在当今数字化时代,网站是一个公司展示其业务的主要方式之一。因此,公司的在线业务应该始终保持高可用性和可靠性。ASP主机服务器是一种用于托管网站的服务器,其特点是可靠性高。但是,即使是最可靠的服务器也会遭受故障或崩溃。在本文中,我们将探讨如何避免美国ASP主机服务器的故障和崩溃。
一枕寒凉
2023/04/23
2.6K0
服务器故障邮件报警
说到服务器硬件监测,用得最多的自然是Zabbix和prometheus,可是对于一般用户来说,部署要求比较高,而且也没有必要。
IT狂人日志
2023/09/06
2630
服务器故障邮件报警
MySQL一次修改表字段故障修复演示
本公司开发使用的开发语言是PHP Laravel框架,通过 php artisan migrate 进行操作,导致数据库异常,随后再执行这个SQL语句一直报错,报错提示如下:
wubx
2019/04/24
7110
MySQL一次修改表字段故障修复演示
MySQL一次修改表字段故障修复演示
本公司开发使用的开发语言是 PHP Laravel 框架,通过 php artisan migrate 进行操作,导致数据库异常,随后再执行这个SQL语句一直报错,报错提示如下:
wubx
2019/02/27
7370
MySQL一次修改表字段故障修复演示
故障分析 | MySQL OOM 故障应如何下手
前阵子处理这样一个案例,某客户的实例 mysqld 进程内存经常持续增加导致最终被 OOM killer。作为 DBA 肯定想知道有哪些原因可能会导致 OOM(内存溢出)。
爱可生开源社区
2020/04/27
1.7K0

相似问题

将表从一台服务器复制到另一台服务器

30

Java文件从一台服务器复制到另一台服务器

30

将表从一台SQL服务器复制到另一台SQL服务器

21

Kafka数据从一台服务器复制到另一台服务器

10

将数据从一台RDS服务器复制到另一台服务器

41
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文