Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jsonnet对json字符串进行更改_Json_Kubernetes_Prometheus_Jsonnet - Fatal编程技术网

使用jsonnet对json字符串进行更改

使用jsonnet对json字符串进行更改,json,kubernetes,prometheus,jsonnet,Json,Kubernetes,Prometheus,Jsonnet,我想使用jsonnet在下面的json中更改alok pod.json中的namespace { "apiVersion": "v1", "items": [ { "apiVersion": "v1", "data": { "alok-pod.json": "{\n \"namespace\": \"alok\",\n \"editable\": true,\n}"

我想使用jsonnet在下面的json中更改
alok pod.json
中的
namespace

{
    "apiVersion": "v1",
    "items": [
        {
            "apiVersion": "v1",
            "data": {
                "alok-pod.json": "{\n  \"namespace\": \"alok\",\n  \"editable\": true,\n}"
            }
        },
    ]
}

请建议如何使用jsonnet实现这一点?

注意,您需要一个从master构建的
jsonnet
二进制文件,因为自2019-02-26年起,
std.parseJson()
尚未发布

input.json

编辑www.jsonnet

运行示例:


这个问题与[库伯内特斯]或[普罗米修斯]无关。同意。但是库伯内特斯和普罗米修斯的读者可以提供帮助,因为这是一个更常见的用例。顺便说一句,
alok pod.json
值是其上一个
中的无效json。我刚刚发布了一个小库,旨在帮助处理这样的案例:。谢谢,让我试试这个
{
    "apiVersion": "v1",
    "items": [
        {
            "apiVersion": "v1",
            "data": {
                "alok-pod.json": "{\n  \"namespace\": \"alok\",\n  \"editable\": true\n}"
            }
        },
    ]
}
// edit_ns.jsonnet for https://stackoverflow.com/questions/54880959/make-changes-to-json-string-using-jsonnet
//
// NOTE: as of 2019-02-26 std.parseJson() is unreleased, 
// need to build jsonnet from master.

local input = import "input.json";

local edit_ns_json(json, ns) = (
  std.manifestJson(std.parseJson(json) { namespace: ns })
);

local edit_ns(x, ns) = (
  x {
    local d = super.data,
    data+: {
      [key]: edit_ns_json(d[key], ns) for key in std.objectFields(d)
    }
  }
);

[edit_ns(x, "foo") for x in input.items]
$ jsonnet-dev edit_ns.jsonnet
[
   {
      "apiVersion": "v1",
      "data": {
         "alok-pod.json": "{\n    \"editable\": true,\n    \"namespace\": \"foo\"\n}"
      }
   }
]