如何使用 Go 將多行 json 轉換為單行 json?
從:
{
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
至:
{"release_date":"2004-11-09","status":"retired","engine":"Gecko","engine_version":"1.7"}
uj5u.com熱心網友回復:
json.Compact()正是這樣做的:
func Compact(dst *bytes.Buffer, src []byte) errorCompact 將 JSON 編碼的 src 附加到 dst,省略了無關緊要的空格字符。
json.Compact()優于解組和再次編組,因為它適用于任何有效的 JSON,并且速度要快得多(它不會創建和丟棄 Go 值)。它也優于使用任何正則運算式,同樣,它要快得多,并且正則運算式不能完全理解 JSON 語法,因此可能會導致資料丟失。
例如:
func main() {
dst := &bytes.Buffer{}
if err := json.Compact(dst, []byte(src)); err != nil {
panic(err)
}
fmt.Println(dst.String())
}
const src = `{
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}`
這將輸出(在Go Playground上嘗試):
{"release_date":"2004-11-09","status":"retired","engine":"Gecko","engine_version":"1.7"}
uj5u.com熱心網友回復:
將多行 JSON 解組為 a struct(或 a map[string]any{}),然后將其編組為不帶任何縮進選項的字串。所以,像這樣:
v := struct {
ReleaseDate string `json:"release_date"`
Status string `json:"status"`
Engine string `json:"engine"`
Version string `json:"engine_version"`
}{}
if err := json.Unmarshal([]byte(s), &v); err != nil {
fmt.Printf("ERROR: %v\n", err)
} else if bytes, err := json.Marshal(v); err != nil {
fmt.Printf("ERROR: %v\n", err)
} else {
fmt.Printf("%v\n", string(bytes))
}
(去游樂場)
uj5u.com熱心網友回復:
如果你不知道你會得到哪種 json,就這樣使用
package main
import (
"encoding/json"
"fmt"
)
const js = `
{
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"1": "1.7"
}
`
func main() {
helper := make(map[string]interface{})
err := json.Unmarshal([]byte(js), &helper)
if err != nil {
fmt.Printf("json.Unmarshal([]byte(s), &helper) failed. Error: %v\n", err)
return
}
bytes, err := json.Marshal(helper)
if err != nil {
fmt.Printf("json.Marshal(helper) failed. Error: %v\n", err)
return
}
fmt.Println(string(bytes))
}
在這里試試
并且不要使用替換空格,因為您可能會損壞 json 值
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490942.html
上一篇:jq-如何左連接和合并來自兩個輸入JSON檔案的欄位
下一篇:JSON陣列和簡單資料在同一列
