mirror of
https://github.com/joohoi/acme-dns.git
synced 2025-01-31 01:44:26 +07:00
68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
|
||
|
"github.com/codegangsta/cli"
|
||
|
|
||
|
diff "github.com/yudai/gojsondiff"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
app := cli.NewApp()
|
||
|
app.Name = "jd"
|
||
|
app.Usage = "JSON Diff"
|
||
|
app.Version = "0.0.2"
|
||
|
|
||
|
app.Flags = []cli.Flag{}
|
||
|
|
||
|
app.Action = func(c *cli.Context) {
|
||
|
if len(c.Args()) < 2 {
|
||
|
fmt.Println("Not enough arguments.\n")
|
||
|
fmt.Printf("Usage: %s diff json_file\n", app.Name)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
|
||
|
diffFilePath := c.Args()[0]
|
||
|
jsonFilePath := c.Args()[1]
|
||
|
|
||
|
// Diff file
|
||
|
diffFile, err := ioutil.ReadFile(diffFilePath)
|
||
|
if err != nil {
|
||
|
fmt.Printf("Failed to open file '%s': %s\n", diffFilePath, err.Error())
|
||
|
os.Exit(2)
|
||
|
}
|
||
|
|
||
|
// Load Diff file
|
||
|
um := diff.NewUnmarshaller()
|
||
|
diffObject, err := um.UnmarshalBytes(diffFile)
|
||
|
if err != nil {
|
||
|
fmt.Printf("Failed to load diff file '%s': %s\n", diffFilePath, err.Error())
|
||
|
os.Exit(2)
|
||
|
}
|
||
|
|
||
|
// JSON file
|
||
|
jsonFile, err := ioutil.ReadFile(jsonFilePath)
|
||
|
if err != nil {
|
||
|
fmt.Printf("Failed to open file '%s': %s\n", jsonFilePath, err.Error())
|
||
|
os.Exit(2)
|
||
|
}
|
||
|
|
||
|
// Load JSON
|
||
|
var jsonObject map[string]interface{}
|
||
|
json.Unmarshal(jsonFile, &jsonObject)
|
||
|
|
||
|
// Apply
|
||
|
differ := diff.New()
|
||
|
differ.ApplyPatch(jsonObject, diffObject)
|
||
|
|
||
|
pachedJson, _ := json.MarshalIndent(jsonObject, "", " ")
|
||
|
fmt.Println(string(pachedJson))
|
||
|
}
|
||
|
|
||
|
app.Run(os.Args)
|
||
|
}
|