精靈小巧的 Jsonpath 萬精油:Snack3

劉之西東發表於2020-08-11

前幾天和一個群裡的朋友交流一個需求:在 Json 裡像 XPath 一樣找出節點,並修改值,然後輸出新的Json。

很多人馬上就會說,Jsonpath 啊。

是的 Jsonpath 確實能快速找出節點;但修改值,並在之前的文件樹裡生效,能嗎???很多框架並不能!(或者相當複雜)

能處理這種需要的 Snack3 算一個,而且非常的方便:

case1 :修改k1的值

var json = "{\"k1\":1,\"k2\":\"123\",\"k3\":\"az章\",\"k4\":[1, 2],\"k5\":{\"k51\": \"511\", \"k52\":[{\"k521\":\"e\"},{\"k521\":\"F\"}]}}";

var oNode = ONode.load(json);

oNode.select("$.k1").val(2);

var json21 = oNode.toJson();

case2 :修改k5/k52/@k512的值為e的所有節點(這需求聽著都暈)

var json = "{\"k1\":1,\"k2\":\"123\",\"k3\":\"az章\",\"k4\":[1, 2],\"k5\":{\"k51\": \"511\", \"k52\":[{\"k521\":\"e\"},{\"k521\":\"F\"}]}}";

var oNode = ONode.load(json);

oNode.select("$.k5.k52[?(@.k521 == 'e')].k521").forEach(n-> n.val("ee"));

var json22 = oNode.toJson();

處理之種需求,只需要新增70kb的框架

<dependency>
  <groupId>org.noear</groupId>
  <artifactId>snack3</artifactId>
  <version>3.1.8.1</version>
</dependency>

萬精油哦......

相關文章