You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Golang中将JSON中键的int类型值转为string类型

在Golang中将JSON中所有整数值转换为字符串类型

需求描述

需要实现一个功能:将指定JSON中所有键对应的整数类型值转换为字符串类型。

输入JSON示例

{
    "id": 12345,
    "wrapper": 898984,
    "sections": {
        "main": {
            "type": 76899
        }
    },
    "order": [
        82322
    ]
}

期望输出JSON示例

{
    "id": "12345",
    "wrapper": "898984",
    "sections": {
        "main": {
            "type": "76899"
        }
    },
    "order": [
        "82322"
    ]
}

解决方案

通过递归遍历JSON解析后的interface{}结构,识别整数类型(包括JSON解析默认生成的float64类型整数)并转换为字符串。以下是完整实现代码:

package main

import (
	"encoding/json"
	"fmt"
	"strconv"
)

// convertIntsToStrings 递归遍历数据结构,将所有整数值转换为字符串
func convertIntsToStrings(v interface{}) interface{} {
	switch val := v.(type) {
	case map[string]interface{}:
		for key, value := range val {
			val[key] = convertIntsToStrings(value)
		}
		return val
	case []interface{}:
		for index, value := range val {
			val[index] = convertIntsToStrings(value)
		}
		return val
	case float64:
		// 判断是否为无小数部分的整数
		if val == float64(int64(val)) {
			return strconv.FormatInt(int64(val), 10)
		}
		return val
	case int:
		return strconv.Itoa(val)
	case int64:
		return strconv.FormatInt(val, 10)
	default:
		// 其他类型保持原样返回
		return val
	}
}

func main() {
	input := []byte(`{
    "id": 12345,
    "wrapper": 898984,
    "sections": {
        "main": {
            "type": 76899
        }
    },
    "order": [
        82322
    ]
}`)

	var rawData interface{}
	if err := json.Unmarshal(input, &rawData); err != nil {
		fmt.Printf("JSON解析失败: %v\n", err)
		return
	}

	processedData := convertIntsToStrings(rawData)

	output, err := json.MarshalIndent(processedData, "", "    ")
	if err != nil {
		fmt.Printf("JSON生成失败: %v\n", err)
		return
	}

	fmt.Println(string(output))
}

代码说明

  1. 递归遍历:函数通过类型断言识别JSON解析后的三种核心结构——对象(map[string]interface{})、数组([]interface{})和基本类型,对前两者进行递归遍历处理。
  2. 整数判断与转换:由于JSON解析时会将整数转为float64类型,因此需要判断该浮点数是否为无小数部分的整数,再转换为十进制字符串;同时直接处理int、int64等原生整数类型。
  3. 兼容性:其他类型(字符串、布尔值、null等)保持原有类型不变,不影响JSON结构。

内容的提问来源于stack exchange,提问作者Biswajit Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:05:23