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

属性名称的JSON语法

罗允晨
2023-03-14
问题内容

在JavaScript中创建可在大多数网络浏览器上运行的对象的正确语法是什么(我的意思是:IE 6 +,Firefox 2 +,Opera 9+)

这有效吗

var a = {
  "class": "Person",
  "name": "William Shakespeare",
  "birthday": -12802392000000,
  "nickname": "Bill"
};

还是这个:

var a = {
  class: "Person",
  name: "William Shakespeare",
  birthday: -12802392000000,
  nickname: "Bill"
};

两者之间有什么区别?


问题答案:

@AndreasN是正确的:JSON规范规定了使用引号的目的,以便使其实际上是JSON。如果不使用引号,则在Javascript中它可能是有效的对象文字,但不是JSON。除了浏览器端Javascript之外,其他服务也使用JSON(例如,使用php,Java等的webservices),如果您构造的字符串缺少引号,则不能保证将其正确解析-
尽管我怀疑大多数实现都会足够强大以做到这一点。

仅供参考,使用Java脚本在无法阻止恶意攻击的来源上直接对JSON字符串使用eval()是危险的。再次,请参阅提供更多说明的JSON站点以及一个很短的javascript文件,该文件将JSON字符串安全地解析为Javascript对象。

编辑: 我猜从技术上来说,您最初的问题不是关于JSON,而是关于 对象文字
的Javascript语法。区别在于可从JSON字符串构造的对象将排除许多其他可能的对象文字,例如:

var a = {cat: "meow", dog: "woof"};
var aname = {cat: "Garfield", dog: "Odie"};
var b = {
  counter: 0,
  pow: function(x) { return x+1; },
  zap: function(y) { return (counter += y); }
};
var c = {
  all: [a,aname],
  animals: a,
  names: aname,
};

对象文字“ a”和“ aname”可以用JSON表示(通过在属性名称中添加引号)。但是对象文字“ b”和“ c”不能。对象文字“b”包含函数(JSON不允许)。上面的对象文字“c”以无法在JSON中表示的方式包含对其他变量的引用,因为某些引用是共享的。如果您进行更改,c.namesc.all[1]它们也会更改,因为它们共享对相同变量的引用。JSON只能表示具有树结构的对象(例如,整个对象的每个子元素都是独立的)。



 类似资料:
  • 问题内容: 我想序列化一个对象,以便根据字段的类型对字段之一进行不同的命名。例如: 在这里,我希望将字段序列化为类似的内容,而不是总是根据情况包含一个称为不同类型的字段。 使用Jackson怎么能达到这样的目的? 问题答案: 使用自定义。 然后,假设您要序列化以下两个对象: 第一个将打印: 第二个: 我使用了包装对象的名称,因为它仅用作花边固定器。如果要删除它,则必须为 整个 类编写一个自定义序列

  • 问题内容: 有没有一种方法可以在序列化期间更改Data属性的名称,因此我可以在WEB Api中重用该类。 例如,如果我要返回用户的分页列表,则应将Data属性序列化为“用户”,如果要返回项目列表,则应将其称为“项目”,依此类推。 可能是这样的: 编辑: 我希望对此功能进行控制,例如,尽可能传递名称。如果我叫,我还是想序列化的属性被称为,没有。 例 问题答案: 您可以通过自定义进行操作。解析器可以寻

  • 问题内容: 我有一堂课,有以下领域。这些属性用于在需要调用外部rest API方法时序列化为json对象。 在属性名称中,外部API服务调用需要一些类似json归档名称格式的内容。 就我而言,这可以根据诸如test,dev和prod之类的环境进行更改。因此,我正在寻找一种将listId值移动到app.config中的方法。 我尝试按照以下方式进行操作,但不允许这样做。如果分配常数值,它将起作用。

  • 问题内容: 我正在使用Python(2.7)’json’模块来处理各种JSON feed。不幸的是,这些提要中的某些不符合JSON标准- 特别是某些键没有用双语音标记(“)包装。这导致Python出现错误。 我想写一个丑陋的代码来解析和修复传入的数据之前,我想问一下-有什么方法可以让Python解析此格式错误的JSON或“修复”数据,以便有效的JSON? 工作实例 破例 我编写了一个小的REGEX

  • 问题内容: 如何设置Newtonsoft.Json以使用旧成员名称反序列化对象,但使用当前成员名称序列化该对象? 编辑:一项要求是将过时的成员从要序列化/反序列化的类中删除。 这是一个需要序列化和反序列化的示例对象。我给了一个属性一个属性,该属性包含过去可能已序列化过的名称的列表。 我想始终使用名称“ a”对json进行序列化,但能够从任何旧名称(包括“ alpha”和“ omega”)以及当前名

  • 问题内容: 我想序列化一个对象,以便根据字段的类型对字段之一进行不同的命名。例如: 在这里,我希望将该字段序列化为类似的内容,而不是总是根据情况将字段称为包含不同类型的字段。 使用Jackson怎么能达到这样的目的? 问题答案: 使用自定义。 然后,假设您要序列化以下两个对象: 第一个将打印: 第二个: 我使用了包装对象的名称,因为它仅用作花边固定器。如果要删除它,则必须为 整个 类编写一个自定义