Linux 读取JSON字符串

1. C++ json读写

1.1. rapidjson

git clone https://github.com/Tencent/rapidjson.git

待续

1.2. JsonCpp

1.2.1. 安装和编译

  1. 下载

http://sourceforge.net/projects/jsoncpp/files/

  1. 下载scons

http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.tar.gz/download

  1. 解压scons-2.1.0.tar.gz
tar -zvxf scons-2.1.0.tar.gz

我的解压到了/opt/JSON/scons-2.1.0目录下了

  1. 进入到解压目录scons-2.1.0下面,执行命令:
sudo python setup.py install
  1. 解压jsconcpp
tar -zvxf jsoncpp-src-0.5.0.tar.gz

我的解压到了/opt/JSON/jsoncpp-src-0.5.0下

  1. 进入到jsoncpp解压目录下,执行命令:
sudo scons platform=linux-gcc
  1. 拷贝动态库
    将jsoncpp-src-0.5.0/libs/linux-gcc-4.9.1/目录下的libjson_linux-gcc-4.9.1_libmt.a 拷贝到/usr/local/lib/下,并为了方便使用,将其重命名为libjson.a

  2. 实例

#include<iostream>
#include<json/json.h>

using namespace std;

int main()
{
    string test="{\"id\":1,\"name\":\"kurama\"}";
    Json::Reader  reader;
    Json::Value   value;
    
    if(reader.parse(test,value))
    {
        if(!value["id"].isNull())
        {
            cout<<value["id"].asInt()<<endl;
            cout<<value["name"].asString()<<endl;
        }
    }
    return 0;
}
g++ test.cpp -I include -L libs/linux-gcc-9 -ljson_linux-gcc-9_libmt

2. C语言使用CJSON

2.1. 编译和安装

  1. 下载
https://sourceforge.net/projects/cjson/
  1. 使用
    以安装包中的test.c为例
➜  cJSON gcc cJSON.c test.c -o test_json -lm
➜  cJSON ls
cJSON.c  cJSON.h  LICENSE  README  test.c  test_json  tests

https://blog.csdn.net/nanfeibuyi/article/details/86605234

3. shell读写json

3.1. JQ实例1

test.json

{
    "menu": {
        "id": "file",
        "value": "File:",
        "popup": {
            "menuitem": {
                "value": "New",
                "onclick": "CreateNewDoc()"
            }
        }
    }
}

json.sh

#! /bin/bash

JQ_EXEC=`which jq`

FILE_PATH=test.json

id = $(cat $FILE_PATH  | jq  '.errmsg.requirement1.code'  |  awk  '{print int($2)}')
echo $id 
id = $(cat $FILE_PATH  | jq  '.errmsg.requirement1.code'  |  awk  -F  '"'  '{print $2}')
echo $id 
id=$(cat $FILE_PATH | ${JQ_EXEC} .menu.id | sed 's/\"//g')
echo $id 

输出

JQ_EXEC:/usr/bin/jq
file

3.2. JQ实例2

示例,基于以下输入字符串 – 输出是stdout:

jsonStr='{ "key1": "value1","key3": "value3" }'

删除“key3”:

jq 'del(.key3)' <<<"$jsonStr"

添加属性“key4”,值为“value4”:

jq '. + { "key4": "value4" }' <<<"$jsonStr"

将现有属性“key1”的值更改为“new-value1”:

jq '.key1 = "new-value1"' <<<"$jsonStr"

如果要在现场更新JSON文件(概念上讲),请使用删除“key3”的示例:

# Create test file.
echo '{ "key1": "value1","key3": "value3" }' > test.json
 
# Remove "key3" and write results back to test.json (recreate it with result).
jq -c 'del(.key3)' test.json > tmp.$$.json && mv tmp.$$.json test.json

您无法直接替换输入文件,因此将结果写入临时文件,成功替换输入文件.

3.2. shell命令

有一个example.txt文件,文件内容如下:

{“err_code”:200,”err_msg”:”this is no error”,“status”:1,“dev_name”:“mylinux”,“dev_id”:123}

如果我们想要获取dev_id字段的值,可以在命令行下使用如下一行命令:

cat example.txt | sed ‘s/,/\n/g’ | grep “dev_id” | sed ‘s/:/\n/g’|sed ‘1d’ | sed ‘s/}//g’

https://www.cnblogs.com/gouge/p/7090469.html
https://stedolan.github.io/jq/download
http://blog.chinaunix.net/uid-24774106-id-3830242.html
https://blog.csdn.net/qq_26502245/article/details/100191694
https://www.cnblogs.com/yjt1993/p/10028089.html
https://www.cnblogs.com/yjb333/p/10370521.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jq是一款命令行下处理JSON数据的工具,可以通过一系列的过滤器和表达式来转换JSON数据并输出需要的结果。安装jq可以使用不同的方法,例如在macOS上使用brew install jq,Linux上使用wget命令下载jq,并设置可执行权限后移动到/usr/bin目录,CentOS上使用yum install jq,Ubuntu上使用apt命令安装jq。 在使用jq解析JSON字符串时,可以使用不同的表达式来获想要的数据。例如,要获根级别的key,可以使用jq -r keys[]命令,要获下层成员的key,可以先使用jq .c命令获"c"字段的内容,然后再使用jq -r keys[]命令来获下层成员的key。 参考引用: :自己用shell处理json字符串的时候,开发输入格式的不通会导致解析字符串有问题,所以这里用到了jq工具 jq 是一款命令行下处理 JSON 数据的工具。其可以接受标准输入,命令管道或者文件JSON 数据,经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将结果输出到标准输出。jq 的这种特性使我们可以很容易地在 Shell 脚本调用它。 :获串行json的key $ cat test.json { "a": "aa", "b": "bb", "c": { "dd": "ddd", "ee": "eee" } } //获根级别的keys: $ jq -r keys[] test.json a b c 获下层成员的keys: $ jq .c test.json | jq -r keys[] dd ee :因为最近要处理一些 JSON 数据格式,所以在经过一番搜索后 最终找到了 jq 这个很棒的工具。jq 允许你直接在命令行下对 JSON 进行操作,包括分片、过滤、转换等等。 让我们通过几个例子来说明 jq 的功能: 一、输出...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值