之所以叫美化而不叫格式化,是因为是给人看的,改变了数据结构
各个业务之间传递数据,喜欢用 jsonstring
传递层级一多,满屏的转义符,没法看了
看了一些 格式化工具,都是保持原来数据结构,以保证程序正确运行为先,没有这种自动美化的
美化后数据不能直接喂给程序哦~~
原始的
{
"l": 2,
"v": "{\"l\":1,\"v\":\"{\\\"l\\\":0,\\\"v\\\":\\\"{\\\\\\\"a\\\\\\\":[{\\\\\\\"l\\\\\\\":2,\\\\\\\"v\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"l\\\\\\\\\\\\\\\":1,\\\\\\\\\\\\\\\"v\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"l\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"v\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"AAAA\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}\\\\\\\\\\\\\\\"}\\\\\\\"},{\\\\\\\"l\\\\\\\":1,\\\\\\\"v\\\\\\\":\\\\\\\"{\\\\\\\\\\\\\\\"l\\\\\\\\\\\\\\\":0,\\\\\\\\\\\\\\\"v\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\"{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"value\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\":\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"BBBB\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"}\\\\\\\\\\\\\\\"}\\\\\\\"}],\\\\\\\"value\\\\\\\":\\\\\\\"CCC\\\\\\\"}\\\"}\"}"
}
// 美化后
{
"l": 2,
"v": {
"l": 1,
"v": {
"l": 0,
"v": {
"a": [
{
"l": 2,
"v": {
"l": 1,
"v": {
"l": 0,
"v": {
"value": "AAAA"
}
}
}
},
{
"l": 1,
"v": {
"l": 0,
"v": {
"value": "BBBB"
}
}
}
],
"value": "CCC"
}
}
}
}
忘记 附加地址了
JSON 美化链接
1
wangtian2020 8 天前 2
有的,把发送字符串 object 的后端打一顿,他就自动美化了
|
2
6364v2 8 天前
蹲一个,我也想找个能自动去转义的 json 工具
|
3
liuidetmks OP @wangtian2020 有时候跨业务,甚至跨公司,还是字符串最稳 😂
|
4
wangtian2020 8 天前
我对菜 Java Boy 的 PTSD 又要发作了,多找一下后端的麻烦,少找自己的问题
|
5
liuidetmks OP @6364v2 忘记发链接了 https://lei.pages.dev/jsontool
|
6
x86 8 天前
可以用 GPT 写一个,"JSON 去除转移缩进美化返回给我"
```json { "l": 2, "v": { "l": 1, "v": { "l": 0, "v": { "a": [ { "l": 2, "v": { "l": 1, "v": { "l": 0, "v": { "value": "AAAA" } } } }, { "l": 1, "v": { "l": 0, "v": { "value": "BBBB" } } } ], "value": "CCC" } } } } ``` |
7
hellojukay 8 天前
```golang
package main import ( "encoding/json" "fmt" "io" "os" ) // recursivelyUnescapeJSON 递归处理嵌套的 JSON 字符串 func recursivelyUnescapeJSON(data interface{}) interface{} { switch v := data.(type) { case map[string]interface{}: // 处理对象 result := make(map[string]interface{}) for key, value := range v { if key == "v" { // 特殊处理 "v" 字段中的 JSON 字符串 if strValue, ok := value.(string); ok { var parsed interface{} if err := json.Unmarshal([]byte(strValue), &parsed); err == nil { result[key] = recursivelyUnescapeJSON(parsed) continue } } } result[key] = recursivelyUnescapeJSON(value) } return result case []interface{}: // 处理数组 result := make([]interface{}, len(v)) for i, value := range v { result[i] = recursivelyUnescapeJSON(value) } return result case string: return v default: return v } } func main() { // 从标准输入读取所有内容 input, err := io.ReadAll(os.Stdin) if err != nil { fmt.Fprintf(os.Stderr, "Error reading from stdin: %v\n", err) os.Exit(1) } // 创建一个通用的 interface{} 来存储任意 JSON 数据 var data interface{} // 将输入的 JSON 字符串解析为对象 if err := json.Unmarshal(input, &data); err != nil { fmt.Fprintf(os.Stderr, "Error parsing JSON: %v\n", err) os.Exit(1) } // 递归处理所有嵌套的 JSON 字符串 processed := recursivelyUnescapeJSON(data) // 将对象重新转换为 JSON 字符串,使用缩进格式化 output, err := json.MarshalIndent(processed, "", " ") if err != nil { fmt.Fprintf(os.Stderr, "Error converting back to JSON: %v\n", err) os.Exit(1) } // 输出结果 fmt.Println(string(output)) } ``` |
8
houshuu 7 天前 via iPhone
工作上确实也有类似场景,用 jq 在 zsh 里写个简单的 function 其实就可以了
|