Skip to content

Instantly share code, notes, and snippets.

@rusdevops
Last active February 27, 2020 19:25
Show Gist options
  • Save rusdevops/1a9c736b6d77f667baa0b52f9b8c29e7 to your computer and use it in GitHub Desktop.
Save rusdevops/1a9c736b6d77f667baa0b52f9b8c29e7 to your computer and use it in GitHub Desktop.

Example

"settings": {
  "key0": null,
  "key1": "value1",
  "key2": ["value21", "value22"],
  "key3": {
    "key30": null,
    "key31": "value1",
    "key32": ["value321", "value322"],
    "key33": {
      "key330": null
    }
  }
}

Overhead

add item to array

add value323 in key32

{
  "patch": {
    "settings": {
      "key3": {
        "key32": ["value321", "value322", "value323"]
      }
    }
  }
}
{
  "patch": {
    "settings": [
      {"op": "add", "path": "/key3/key32/-", "value": "value323"}
    ]
  }
}
  • need to enumerate all values

remove item to array

remove value322 in key32

{
  "patch": {
    "settings": {
      "key3": {
        "key32": ["value321", "value323"]
      }
    }
  }
}
{
  "patch": {
    "settings": [
      {"op": "remove", "path": "/key3/key32/1"}
    ]
  }
}
  • need to enumerate all values

replace an object with a nonexistent key

set value301 for key301

{
  "patch": {
    "settings": {
      "key3": {
        "key30": {
          "key301": "value301"
        }
      }
    }
  }
}
{
  "patch": {
    "settings": [
      {
        "op": "replace",
        "path": "/key3/key30",
        "value": {
          "key301": "value301"
        }
      }
    ]
  }
}

should the key301 exist or not ? -- overhead for implemetation logic

remove existed key

remove key32

{
  "patch": {
    "settings": {
      "key3": {
        "key30": null,
        "key31": "value1",
        "key33": {
          "key330": null
        }
    }
  }
}
{
  "patch": {
    "settings": [
      {"op": "remove", "path": "/key3/key32"}
    ]
  }
}

remove key32 and key0

{
  "patch": {
    "settings": {
      "key1": "value1",
      "key2": ["value21", "value22"],
      "key3": {
        "key30": null,
        "key31": "value31",
        "key33": {
          "key330": null
        }
    }
  }
}
{
  "patch": {
    "settings": [
      {"op": "remove", "path": "/key0"},
      {"op": "remove", "path": "/key3/key32"}
    ]
  }
}
  • need to enumerate another values

set value to null

set value33 to null

{
  "patch": {
    "settings": {
      "key3": {
        "key33": null
      }
    }
  }
}
{
  "patch": {
    "settings": [
      {"op": "replace", "path": "/key3/key33", "value": null}
    ]
  }
}

remove key32 and key0

{
  "patch": {
    "settings": {
      "key1": "value1",
      "key2": ["value21", "value22"],
      "key3": {
        "key30": null,
        "key31": "value31",
        "key33": {
          "key330": null
        }
    }
  }
}

key30: null -- what that mean ? need to remove old value or it's old value

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment