小编use*_*040的帖子

使用 jq 动态将 json 对象添加到数组中

下面是我的employee.json 文件的模板

{
    "orgConfig": {
        "departments": []
    }
}
Run Code Online (Sandbox Code Playgroud)

其中部门将有如下所示的一系列部门

{
    "name" : "physics",
    "id" : "1234",
    "head" : "abcd"
}
Run Code Online (Sandbox Code Playgroud)

相似地

{
    "name" : "chemistry",
    "id" : "3421",
    "head" : "xyz"
}
Run Code Online (Sandbox Code Playgroud)

所以我想构造的最终数组结构如下

{
    "orgConfig": {
        "departments": [
            {
                "name" : "physics",
                "id" : "1234",
                "head" : "abcd"
            },
            {
                "name" : "chemistry",
                "id" : "3421",
                "head" : "xyz"
            },
            {
                "name" : "Maths",
                "id" : "4634",
                "head" : "jklm"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

下面是我将 json 元素动态添加到 Departments 数组的代码 …

bash command-line json jq

5
推荐指数
1
解决办法
8077
查看次数

使用 jq 或 sed 替换 JSON 中的属性或键

有一个像这样的大 json

"envConfig": {
    "environmentName": {
        "versions": [
            {
                "name": "version1",
                "value": "Dev"
            },
            {
                "name": "version2",
                "host": "qa"
            }
        ],
        "userRoles": [
            {
                "name": "Roles",
                "entry": [
                    {
                        "name": "employees",
                        "value": "rwx"
                    },
                    {
                        "name": "customers",
                        "value": "rx"
                    }
                ]
            }
        ]
    }
},
Run Code Online (Sandbox Code Playgroud)

我想将 JSON 属性从“environmentName”更改为“prod”。以下是我期待的输出

"envConfig": {
    "prod": {
        "versions": [
        ...
        ],
        "userRoles": [
        ...
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

尝试使用 sed 命令如下

sed "s/\('environmentName':\)/\1\"prod\"\,/g" version.json
Run Code Online (Sandbox Code Playgroud)

尝试使用 jq 如下但不起作用

cat version.json | jq  ' with_entries(.value |=   {"prod" : …
Run Code Online (Sandbox Code Playgroud)

bash command-line sed jq

5
推荐指数
1
解决办法
5316
查看次数

获取与Javascript中的Reg表达式模式不匹配的所有字符

我有以下要求,其中输入的文本必须匹配以下任何允许的字符列表,并获得所有不匹配reg exp模式的字符.

  1. 0-9
  2. 包括AZ,az

和特殊字符如:

  1. 空间,.@,-_&()'/*= :;
  2. 回车
  3. 行结束

我可以构建的正则表达式如下

/[^a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/]/g
Run Code Online (Sandbox Code Playgroud)

举个例子,比如说input='123.@&-_()/*=:/\';#$%^"~!?[]av'.无效字符是'#$%^"~!?[]'.

下面是我采用的方法来获得不匹配的字符.

1)构造如下所示的允许reg expn模式的否定.

/^([a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/])/g (如果这个reg exp是正确的,请更正吗?)

2) 使用替换功能获取所有字符

var nomatch = '';        
for (var index = 0; index < input.length; index++) {
    nomatch += input[index].replace(/^([a-zA-Z0-9\ \.@\,\r\n*=:;\-_\&()\'\/])/g, '');
}

so nomatch='#$%^"~!?[]' // finally
Run Code Online (Sandbox Code Playgroud)

但是这里的replace函数总是返回一个不匹配的字符.所以使用循环来获取所有.如果输入为100个字符,则它循环100次并且是不必要的.

有没有更好的方法让所有字符与下面的行中的reg exp模式不匹配.

  1. 一个更好的正则表达式来获取不允许的字符(比我上面使用的reg exp的否定)?
  2. 避免不必要的循环?
  3. 单线方法?

非常感谢您对此提供任何帮助.

javascript regex performance

4
推荐指数
1
解决办法
946
查看次数

标签 统计

bash ×2

command-line ×2

jq ×2

javascript ×1

json ×1

performance ×1

regex ×1

sed ×1