Documentation ¶
Overview ¶
Package json_diff : Go language implementation of RFC6902 https://tools.ietf.org/html/rfc6902
Index ¶
- Constants
- func AsDiffs(source, patch []byte, options ...JsonDiffOption) ([]byte, error)
- func DeepCopy(src *decode.JsonNode) (*decode.JsonNode, error)
- func GetDiffNode(sourceJsonNode, patchJsonNode *decode.JsonNode, options ...JsonDiffOption) *decode.JsonNode
- func Marshal(root *decode.JsonNode) ([]byte, error)deprecated
- func MergeDiff(source, diff []byte) ([]byte, error)
- func MergeDiffNode(source, diffs *decode.JsonNode) (*decode.JsonNode, error)
- func Parse(input []byte) (*decode.JsonNode, error)
- func Unmarshal(input []byte) (*decode.JsonNode, error)deprecated
- type DiffType
- type JsonDiffOption
Examples ¶
Constants ¶
View Source
const ( DiffTypeAdd = iota + 1 DiffTypeRemove DiffTypeReplace DiffTypeMove DiffTypeCopy DiffTypeTest )
Variables ¶
This section is empty.
Functions ¶
func AsDiffs ¶
func AsDiffs(source, patch []byte, options ...JsonDiffOption) ([]byte, error)
AsDiffs 比较 patch 相比于 source 的差别,返回 json 格式的差异文档。
Example ¶
json1 := `{ "A": 1, "B": [1, 2, 3, {"1": 2}], "C": { "CA": 1 } }` json2 := `{ "A": 2, "B": [{"1": 2}, 1, {"1": 2}, 4], "C": { "CA": {"CAA": 1} } }` res, err := AsDiffs([]byte(json1), []byte(json2), UseMoveOption, UseCopyOption, UseFullRemoveOption) if err != nil { log.Fatalln(err) } fmt.Println(string(res))
Output:
func GetDiffNode ¶ added in v0.0.2
func GetDiffNode(sourceJsonNode, patchJsonNode *decode.JsonNode, options ...JsonDiffOption) *decode.JsonNode
GetDiffNode 比较两个 JsonNode 之间的差异,并返回 JsonNode 格式的差异结果
func MergeDiff ¶
MergeDiff 根据差异文档 diff 还原 source 的差异
Example ¶
json2 := `{ "A": 1, "B": [1, 2, 3, {"BA": 1}], "C": { "CA": 1, "CB": 2 } }` diffs := `[ {"op": "move", "from": "/A", "path": "/D"}, {"op": "move", "from": "/B/0", "path": "/B/1"}, {"op": "move", "from": "/B/2", "path": "/C/CB"} ]` res, _ := MergeDiff([]byte(json2), []byte(diffs)) fmt.Println(res)
Output:
func MergeDiffNode ¶ added in v0.0.2
MergeDiffNode 将 JsonNode 类型的 diffs 应用于源 source 上,并返回合并后的新 jsonNode 对象 如果 diffs 不合法,第二个参数将会返回 BadDiffsError
Types ¶
type JsonDiffOption ¶
type JsonDiffOption uint
const ( // UseCopyOption 返回差异时使用 Copy, 当发现新增的子串出现在原串中时,使用该选项可以将 Add 行为替换为 Copy 行为 // 以减少差异串的大小,但这需要额外的计算,默认不开启 UseCopyOption JsonDiffOption = 1 << iota // UseCheckCopyOption 仅在 UseCopyOption 选项开启时有效,替换前会添加 Test 行为,以确保 Copy 的路径存在 UseCheckCopyOption // UseMoveOption 返回差异时使用 Copy, 当发现差异串中两个 Add 和 Remove 的值相等时,会将他们合并为一个 Move 行为 // 以此减少差异串的大小,默认不开启 UseMoveOption // UseFullRemoveOption Remove 时除了返回 path, 还返回删除了的值,默认不开启 UseFullRemoveOption )
Source Files ¶
Click to show internal directories.
Click to hide internal directories.