一个特殊的 Json 『美化』工具

查看 51|回复 8
作者:liuidetmks   
之所以叫美化而不叫格式化,是因为是给人看的,改变了数据结构 
各个业务之间传递数据,喜欢用 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 美化链接
wangtian2020   
忘记 附加地址了
JSON 美化链接
6364v2   
有的,把发送字符串 object 的后端打一顿,他就自动美化了
liuidetmks
OP
  
蹲一个,我也想找个能自动去转义的 json 工具
wangtian2020   
@wangtian2020 有时候跨业务,甚至跨公司,还是字符串最稳  😂
liuidetmks
OP
  
我对菜 Java Boy 的 PTSD 又要发作了,多找一下后端的麻烦,少找自己的问题
x86   
@6364v2  忘记发链接了   https://lei.pages.dev/jsontool
hellojukay   
可以用 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"
      }
    }
  }
}
```
6364v2   
```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))
}
```
您需要登录后才可以回帖 登录 | 立即注册

返回顶部