JSON.stringify,改变key的大小写

发布于 2024-10-28 02:00:35 字数 556 浏览 2 评论 0原文

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

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

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

当更改其中一些属性并传回 json 时,Web 服务现在需要驼峰式大小写(同样,根据我们的方法参数的命名约定)而不是最初返回的帕斯卡大小写。

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

这当然行不通。

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

我可以更改类的序列化,但让我们假装这不是一个选项。有什么想法吗?

谢谢。

I'm consuming a web service that returns json, and storing the json in a local variable. The json represents a simple business object such as:

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

The casing is like that because it matches up with the property names from the .net class, as per our naming convention.

When a change a few of these properties and pass back the json, the web service now expects camel case (again, as per our naming convention for method parameters) instead of the pascal case initially returned.

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

This of course doesn't work.

I'm using JSON.stringify to send the json back to the web service as a string, and I was looking to see if there was an easy way to change the key to camel case. However, it looks like I can only use the replacer param to work with the value.

I could change the serialization of the class, but lets pretend that's not an option. Any ideas?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怎言笑 2024-11-04 02:00:35

您可以在写入之前使用 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 恢复器。

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 函数的结果替换。这可用于将通用对象重新转换为伪类的实例,或将日期字符串转换为日期对象。

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

You can use a JSON replacer to switch keys before writing.

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;
});

For the opposite, you can use a 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;
    });

The second optional argument is a function that is called with every value created as part of the parsing or every value about to be written. These implementations simply iterate over keys and lower-cases the first letter of any that have an upper-case letter.

There is documentation for replacers and revivers at http://json.org/js.html :

The optional reviver parameter is a function that will be called for every key and value at every level of the final result. Each value will be replaced by the result of the reviver function. This can be used to reform generic objects into instances of pseudoclasses, or to transform date strings into Date objects.

The stringifier method can take an optional replacer function. It will be called after the toJSON method (if there is one) on each of the values in the structure. It will be passed each key and value as parameters, and this will be bound to object holding the key. The value returned will be stringified.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文