请教一个json格式用awk处理

一个json格式的一行字符串为:
{"abab":[[1.11,2.2228],[1.2138,8.3213],[108.23,0.1230],[8235.12,1243]],"cdcdc":[[123.1,2.2428],[1.28,8.3213],[108.23,0.123],[85.12,143],[32534.2,4783.34]]}

结构很简单:{}中有两大字段,每个字段内有很多组数据对,比如[1.11,2.2228]。

现在想要把上面的内容要如下格式列出来:

"abab" ----------------------------------
1.11                   2.2228
1.2138               8.3213
108.23               0.1230



“cdcdc"-----------------------------------
123.1                 2.2428
1.28                   8.3213
108.23               0.123


用awk该用什么命令?多谢!

作者: xiongzm   发布时间: 2011-06-13

本帖最后由 ywlscpl 于 2011-06-13 17:47 编辑

回复 xiongzm
{}中可以有多段数据
  1. awk -F '(]],)|:' '{delete m;for (i=1;i<=NF;i++) if (i%2){gsub(/[}{]/,"",$i);print $i"-------------"}else {gsub(/[][}{]/,"",$i);for (j=1;j<=split($i,m,",");j+=2) print m[j],m[j+1]}}' file
复制代码
  1. [root@Mylinux tmp]# cat file
  2. {"test":[[1,3],[5,6]],"abab":[[1.11,2.2228],[1.2138,8.3213],[108.23,0.1230],[8235.12,1243]],"cdcdc":[[123.1,2.2428],[1.28,8.3213],[108.23,0.123],[85.12,143],[32534.2,4783.34]]}
  3. [root@Mylinux tmp]# awk -F '(]],)|:' '{delete m;for (i=1;i<=NF;i++) if (i%2){gs
  4. ub(/[}{]/,"",$i);print $i"-------------"}else {gsub(/[][}{]/,"",$i);for (j=1;j<
  5. =split($i,m,",");j+=2) print m[j],m[j+1]}}' file
  6. "test"-------------
  7. 1 3
  8. 5 6
  9. "abab"-------------
  10. 1.11 2.2228
  11. 1.2138 8.3213
  12. 108.23 0.1230
  13. 8235.12 1243
  14. "cdcdc"-------------
  15. 123.1 2.2428
  16. 1.28 8.3213
  17. 108.23 0.123
  18. 85.12 143
  19. 32534.2 4783.34
复制代码

作者: ywlscpl   发布时间: 2011-06-13

谢谢!明白您的思路了,有些细节不了解。

有一个问题,我想对其数据好看一点,改为如下:
awk -F '(]],)|:' '{delete m;for (i=1;i<=NF;i++) if (i%2){gsub(/[}{]/,"",$i);print $i"-------------"}else {gsub(/[][}{]/,"",$i);for (j=1;j<=split($i,m,",");j+=2) print m[j],"\t\t",m[j+1]}}' file

但是出来不好看,因为第1列数据位数不完全一样,这儿怎么弄一下?再次感谢!

作者: xiongzm   发布时间: 2011-06-13

本帖最后由 ywlscpl 于 2011-06-13 18:04 编辑

回复 xiongzm


    print m[j]"\t\t"m[j+1]

BTW:楼主名字缩写很像我一个朋友

作者: ywlscpl   发布时间: 2011-06-13

OK, done!

作者: xiongzm   发布时间: 2011-06-13