当前位置: 首页 > 面试题库 >

JSON.stringify,更改键的大小写

翟昊明
2023-03-14
问题内容

我正在使用一个返回json的Web服务,并将json存储在本地变量中。json代表一个简单的业务对象,例如:

var entry = {
  "FirstName": "John",
  "LastName": "Doe",
  ....
};

大小写是这样的,因为按照我们的命名约定,它与.net类的属性名称匹配。

当更改其中一些属性并传递回json时,Web服务现在期望使用驼峰式(再次,按照我们对方法参数的命名约定),而不是最初返回的pascal式。

var entry = {
  "firstName": "John",
  "lastName": "Doe",
  ....
};

这当然是行不通的。

JSON.stringify用来将json作为字符串发送回Web服务,并且正在寻找是否有一种简便的方法可以将密钥更改为驼峰式大小写。但是,看来我只能使用replacer参数来使用该值。

我可以更改类的序列化,但请假装这不是一个选择。有任何想法吗?

谢谢。


问题答案:

您可以在写入之前使用JSON替换器来切换密钥。

JSON.stringify(myVal, function (key, value) {
  if (value && typeof value === 'object') {
    var replacement = {};
    for (var k in value) {
      if (Object.hasOwnProperty.call(value, k)) {
        replacement[k && k.charAt(0).toLowerCase() + k.substring(1)] = value[k];
      }
    }
    return replacement;
  }
  return value;
});

相反,您可以使用JSON Reviver。

JSON.parse(text, function (key, value) {
    if (value && typeof value === 'object')
      for (var k in value) {
        if (/^[A-Z]/.test(k) && Object.hasOwnProperty.call(value, k)) {
          value[k.charAt(0).toLowerCase() + k.substring(1)] = value[k];
          delete value[k];
        }
      }
      return value;
    });

第二个可选参数是一个函数,将使用在解析过程中创建的每个值或将要写入的每个值来调用该函数。这些实现只对键进行迭代,并将所有具有大写字母的字母的首字母小写。

在http://json.org/js.html上有关于替换者和复兴者的文档:

可选的reviver参数是一个函数,它将为最终结果的每个级别的每个键和值调用。每个值都将由reviver函数的结果替换。这可用于将通用对象重新构造为伪类的实例,或将日期字符串转换为Date对象

字符串化器方法可以采用可选的替换函数。将在结构中的每个值的toJSON方法(如果有)之后调用它。将把每个键和值作为参数传递给它,并将其绑定到持有键的对象。返回的值将被字符串化。



 类似资料:
  • 问题内容: 我有一个WCF服务操作,该操作返回带有和属性的对象。当我在WCF应用程序中测试操作时,一切正常,并且值正确。但是,我需要能够使用jQuery和JSON格式调用该服务。当我在函数中读回该属性时,该属性的值显然会更改。 搜索后,我发现它会改变很大的价值。所以在这样的代码中: …它将显示为。 怎么了? 此处的演示:http : //jsfiddle.net/naveen/tPKw7/ 问题答

  • 除了这个问题:更改超文本标记语言电子邮件正文字体类型和大小在VBA,我想知道如何才能改变字体大小 当我从代码中删除字体大小时,它确实改变了字体系列。 谢谢你的协助,

  • 我需要能够更改ThreadPoolExecator的任务队列的大小。当然,BlockingQueue不支持更改大小,ThreadPoolExecitor不支持更改队列。 所以,我想到的方法是使用ThreadPoolExecutor。shutdownNow(),它返回了一个尚未执行的可运行程序列表。然后,我可以创建一个具有所需队列大小的新执行器,并重新提交所有任务。 问题是在shutdownNow(

  • 问题内容: 我在启动时修改UIView高度有麻烦。 我必须使用UIView,我希望其中一个是屏幕尺寸* 70,另一个是填补空白。 这是我所拥有的 和 它在运行时对应用程序没有影响。我使用自动版式,但只有边距限制… 我做错了吗? 问题答案: 干得好。这应该工作。

  • 我已经将添加到中(使用),它很大。我能做点什么让它变小吗?

  • 本文向大家介绍JavaScript更改字符串的大小写,包括了JavaScript更改字符串的大小写的使用技巧和注意事项,需要的朋友参考一下 JavaScript提供了两个方法,将字符串转换为全部大写或全部小写,从而可以将“hello”更改为“HELLO”,或者将“NOT”更改为“not”。你可能会问,为什么?将字符串中的字母转换为相同的大小写,这可以使得比较两个字符串变得更容易。例如,假设你创建了