【问题标题】:Convert all the integer value to string in JSON将所有整数值转换为 JSON 中的字符串
【发布时间】:2011-09-12 14:39:09
【问题描述】:

我的 JSON 字符串是:

{name:"MyNode", width:200, height:100}

我想改成:

{name:"MyNode", width:"200", height:"100"}

让所有整数值都变成字符串


我的主要代码是:

{
     "firstName": "John",
     "lastName": "Smith",
     "age": 25,
     "address":
     {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "xy": 10021
     },
     "IDNumber":
     [
         {
           "type": "home",
           "number": 1234
         },
         {
           "type": "fax",
           "number": 4567
         }
     ]
 }

我需要所有整数值都变成字符串

【问题讨论】:

  • -1 表示无法回答的问题,因为您没有说您使用的是哪种编程语言。
  • @Matt Ball:我用 [javascript] 标记了这个问题。未指定语言,但帖子包含 JS 对象文字(不是 JSON,正如您在回答中指出的那样)。所以我删除了 [json] 标签并用 [javascript] 替换它。
  • @Andy d'oh 在编辑历史中回顾的时间不够远,谢谢

标签: java json


【解决方案1】:

这是一个 JavaScript 对象字面量,而不是 JSON。总之……

var obj = {name:"MyNode", width:200, height:100};

for (var k in obj)
{
    if (obj.hasOwnProperty(k))
    {
        obj[k] = String(obj[k]);
    }
}

// obj = {name:"MyNode", width: "200", height: "100"}

如果您实际使用的是 JSON,而不是对象,请先使用 JSON.parse() 字符串,然后使用 JSON.stringify() 对象。

【讨论】:

  • 实际上我在我的 java 代码中得到了 json 值。所以我只需要在 java 中工作。
  • @user:这是你在提问时需要提及的事情,而不是在你得到答案之后。
  • @Matt Ball,只是好奇,你为什么有obj.hasOwnProperty 支票?由于您正在迭代对象的属性,通常您已经知道该对象具有此属性,还是我遗漏了什么?
  • @user 您在使用任何 JSON 库吗?如果没有,请查看Google Gson
  • @Laurent Object.hasOwnProperty() 确保忽略对象原型中不需要的属性。见黄色注释:developer.mozilla.org/en/JavaScript/Reference/Statements/…
【解决方案2】:

如果必须对 JSON 字符串进行操作:

json = json.replace (/:(\d+)([,\}])/g, ':"$1"$2');

【讨论】:

  • 我正在使用 json-lib-2.4-jdk15.jar。那个罐子里没有替换方法。我们可以在java中做同样的事情吗?如果可以请建议。
  • 这是一个非常有帮助的答案。这样做的原因是如果你有非常大的数字(> 53 位精度),那么当你 JSON.parse 他们时,你会失去精度。当您将它们用作ID时,这真的很糟糕。对于我的情况,由于我从不对它们进行数学运算,因此我可以将它们视为字符串,一切都很好。这是我使用的函数:json.replace (/:\s*(\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d+)\s*([,\}])/g, ':"$1"$2');。它的优点是只对非常大的数字进行替换,并且它处理冒号之后和逗号或大括号之前的空格。
【解决方案3】:

我用

const stringifyNumbers = obj => {                                                                                      
  const result = {};                                                                                                   
  Object.entries(obj).map(entry => {                                                                                   
    const type = typeof entry[1];                                                                                      
    if (Array.isArray(entry[1])) {                                                                                     
      result[entry[0]] = entry[1].map(entry => stringifyNumbers(entry));                                               
    } else if (type === 'object' && !!entry[1]) {                                                                      
      result[entry[0]] = stringifyNumbers(entry[1]);                                                                   
    } else if (entry[1] === null) {                                                                                    
      result[entry[0]] = null;                                                                                         
    } else if (type === 'number') {                                                                                    
      result[entry[0]] = String(entry[1]);                                                                             
    } else {                                                                                                           
      result[entry[0]] = entry[1];                                                                                     
    }                                                                                                                  
  });                                                                                                                  
  return result;                                                                                                       
}   

在我看来,大多数 id 应该是字符串。如果您的 api 无法将 id 作为字符串提供,此 sn-p 将转换它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多