有些人格式化他们的JSON文件,其中所有的主要数据元素都在数组中。我希望将数组元素提升为json对象。
换句话说..。我想获取任何像这样的通用文本文件:
{“食品”:{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL,半杯,6矛“,”食品“:”芦笋“},{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL,半杯”,“食品”:“Beans,绿色”},{“fgid”:“vf”,“fgcat_id”:“fgcat_id”,"srvg_sz":"125 mL,半杯煮熟“,”食物“:”Bok/大白菜“},{"fgid":"vf",”vf“,"fgcat_id":"1",”srvg_sz“:”125号mL,半杯“,”食品“:”椰菜“},{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL,0.5杯,4个豆芽”,“srvg_sz”:“布鲁塞尔豆芽”}{"fgid":"vf","fgcat_id":"2","srvg_sz":"125 mL,半杯,1大号“,”食品“:”胡萝卜“}
并找到替换从first "{"到first“[]的文本范围,并将其替换为"{{”和(在单独的命令中?)在结尾处替换"]“,使其看起来如下:
{{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL,半杯,6矛“,”食品“:”芦笋“},{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL,半杯”,“食品”:“Beans,绿色”},{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL,“半杯煮熟“、”食物“:”博彩/大白菜“}、{”fgid“:”vf“、"fgcat_id":"1”、"srvg_sz":"125 mL、半杯“、”食品“:”花椰菜“}、{”fgid“、”fgcat_id“、”1“、”srvg_sz“、”125 mL、0.5杯、4枝“、”食物“:”布鲁塞尔芽“}、{"fgid":"vf","fgcat_id":"2","srvg_sz":"125 mL,半杯,1大号“,”食物“:”胡萝卜“}
但我希望这是任何类似的文件,所以我不知道"foods“文本的长度(或者有时数组前面还有其他元素,我也想在第一个"[”开始“之前删除)。这将帮助我处理来自加拿大政府的Open,因为所有的JSON都在一个数组中的一个对象中。谢谢。我很乐意使用sed或awk。
发布于 2016-10-22 16:35:37
像这样的东西会起作用的我想:
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
use Data::Dumper;
my $json_str =
'{"foods":[{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL, ½ cup, 6 spears","food":"Asparagus"},{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL, ½ cup","food":"Beans, green"},{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL, ½ cup cooked","food":"Bok choy/Chinese cabbage (Choi sum)"},{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL, ½ cup","food":"Broccoli"},{"fgid":"vf","fgcat_id":"1","srvg_sz":"125 mL, ½ cup, 4 sprouts","food":"Brussels sprouts"},{"fgid":"vf","fgcat_id":"2","srvg_sz":"125 mL, ½ cup, 1 large","food":"Carrots"}]}';
my $json_obj = from_json($json_str);
print Dumper \$json_obj;
my $json_arr = $json_obj -> {foods};
print to_json ( $json_arr, { pretty => 1 } );实际上,我确信您的第二个示例实际上不是有效的JSON,因为如果不使用[],您就不能执行“某种数组”。
发布于 2016-10-23 21:10:39
试试这个-
sed -e '1s/{/{{/' -e '$s/\(.*\)]/\1/'下面的解释是:-e用于使用多个sed操作,1s是选择第一行,$s是选择最后一行(.*)]/\1is替换最后出现的[。
https://stackoverflow.com/questions/40194132
复制相似问题