使用bash将JSON文件转换为JSON对象

时间:2018-04-03 05:51:43

标签: json shell

我有一个JSON文件如下:

{
 "IP Address" : " 192.168.43.221 ",
 "OS ":" Ubuntu ",
 "OS Version ": " 16.04.4 ",
 "OS Installed Data ": " Dec 8 23:59 ",
 "Model name ": " AMDA10-5750MAPU with Radeon(tm)HD ",
 "MemTotal ": " 5275728kB ",
 "Hard disk capacity ": " [1.00TB] ", 
 "Users ": " ananth "
}

我想仅使用shell脚本将上述JSON文件转换为JSON对象?有人可以帮我这么做..

提前致谢。

1 个答案:

答案 0 :(得分:1)

您的文件作为JSON文本有效,例如可以通过将内容粘贴到https://jsonlint.com来验证

一种方式来加载"将JSON文件转换为javascript解释器如下。为了特异性,假设解释器是v8或js(JavaScript-C)。首先,复制文件,同时预先添加" x =",例如

(echo "x="; cat input.json) > input.js

现在,在启动v8或js后,运行:load("input.js")

变量x将包含JSON对象。

如果要修剪键名以使它们没有外部空间,则可以运行以下jq命令:

jq 'with_entries(.key|=(sub("^ +";"")|sub(" +$";"")))' input.json

对象平等

基于一些注释,您似乎想要检查两个文件中的JSON对象是否等于"在对象平等的意义上。

这可以通过多种方式完成。一个简单而整洁的方法是使用jq如下:

jq -s '.[0] == .[1]' file1.json file2.json

另一种方法是将文件写入"规范" (即,规范化的)方式,以便可以使用诸如diff之类的面向文本的工具,例如

jq -S . file1.json | sponge file1.json
jq -S . file2.json | sponge file2.json

-S选项使键按固定顺序排序; sponge在这里是不必要的,但很方便。