GVKun编程网logo

JSON 和 Object Literal Notation 有什么区别?(json和object的区别)

19

在本文中,我们将为您详细介绍JSON和ObjectLiteralNotation有什么区别?的相关知识,并且为您解答关于json和object的区别的疑问,此外,我们还会提供一些关于@Temporal

在本文中,我们将为您详细介绍JSON 和 Object Literal Notation 有什么区别?的相关知识,并且为您解答关于json和object的区别的疑问,此外,我们还会提供一些关于@Temporal(TemporalType.DATE)和JSONObject.fromObject(jsonMap);共同存在、asp.net core 3.0 JObject The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported、boto3 list_objects和list_objects_v2有什么区别?、C#中Array和object []有什么区别?的有用信息。

本文目录一览:

JSON 和 Object Literal Notation 有什么区别?(json和object的区别)

JSON 和 Object Literal Notation 有什么区别?(json和object的区别)

有人能告诉我使用Object Literal Notation 定义的 JavaScript 对象和 JSON 对象 之间的主要区别是什么吗?

根据一本 JavaScript 书,它说这是一个使用 Object Notation 定义的对象:

var anObject = {    property1 : true,    showMessage : function (msg) { alert(msg) }};

在这种情况下,为什么它不是 JSON 对象?仅仅因为它不是用引号定义的吗?

答案1

小编典典

让我们首先澄清一下 JSON 实际上是什么。JSON 是一种 文本
的、与语言无关的数据交换格式,很像 XML、CSV 或 YAML。

数据可以以多种方式存储,但如果它应该存储在文本文件中并可供计算机读取,则需要遵循某种结构。JSON 是定义这种结构的众多格式之一。

此类格式通常与语言无关,这意味着它们可以由 Java、Python、JavaScript、PHP 处理,应有尽有。

相反, JavaScript 是一种编程语言。当然,JavaScript 也提供了一种定义/描述数据的方法,但语法是 JavaScript 特有的。

作为一个反例,Python 有 元组 的概念,它们的语法是(x, y). JavaScript 没有这样的东西。


让我们看看 JSON 和 JavaScript 对象字面量之间的语法差异。

JSON 具有以下语法约束:

  • 对象 必须是 字符串 (即用双引号括起来的字符序列")。
  • 这些值可以是:
    • 一个字符串
    • 一个号码
    • 一个(JSON)对象
    • 数组
    • true
    • false
    • null
  • 重复键 ( {"foo":"bar","foo":"baz"}) 产生未定义的、特定于实现的结果;JSON 规范没有明确定义它们的语义

在 JavaScript 中,对象字面量可以有

  • 字符串文字、数字文字或标识符名称作为键(从 ES6 开始,现在也可以计算键,这引入了另一种语法)。
  • 这些值可以是任何有效的 JavaScript 表达式,包括函数定义和undefined.
  • 重复的键产生定义的、指定的结果(在松散模式下,后一个定义替换前者;在严格模式下,这是一个错误)。

知道,仅通过查看 语法 ,您的示例不是 JSON,原因有两个:

  1. 您的键不是字符串(文字)。它们是 标识符名称
  2. 您不能将函数作为值分配给“JSON 对象”(因为 JSON 没有为函数定义任何语法)。

但最重要的是,从头开始重复我的解释:您处于 JavaScript 上下文中。您定义一个 JavaScript 对象。如果有,“JSON
对象”只能包含在字符串中:

 var obj = {foo: 42}; // creates a JavaScript object (this is *not* JSON) var json = ''{"foo": 452}''; // creates a string containing JSON

也就是说,如果您正在编写 JavaScript 源代码,而不是处理 字符串 ,那么您就不是在处理 JSON。也许您以 JSON 格式接收数据(例如,通过
ajax 或从文件中读取),但是一旦您或您正在使用的库解析了它,它就不再是 JSON。


只是因为对象字面量和 JSON 看起来 相似 ,并不意味着您可以互换命名它们。另请参阅没有“JSON
对象”之类的东西。

@Temporal(TemporalType.DATE)和JSONObject.fromObject(jsonMap);共同存在

@Temporal(TemporalType.DATE)和JSONObject.fromObject(jsonMap);共同存在

@Temporal(TemporalType.DATE)的日期类型 是 java.sql.Date,这样在执行JSONObject.fromObject(jsonMap);时会报

net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

异常详细信息最后一句可以看出是getHours()时出异常了。这是因为:@Temporal(TemporalType.DATE)输出到前台页面时输出的格式是:

2011-07-05

没有hours,所以报错,

这时可以把@Temporal(TemporalType.DATE) 改为

@Temporal(TemporalType.TIMESTAMP)
在页面端取值:2011-07-05 22:51:34:000

即可。

asp.net core 3.0 JObject The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported

asp.net core 3.0 JObject The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported

在asp.net core 3.0 中,如果直接在Controller中返回 Jobject 类型,会抛出如下错误:


The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported.
System.NotSupportedException: The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported.
at System.Text.Json.JsonPropertyInfoNotNullable`4.GetDictionaryKeyAndValueFromGenericDictionary(WriteStackFrame& writeStackFrame, String& key, Object& value)
at System.Text.Json.JsonPropertyInfo.GetDictionaryKeyAndValue(WriteStackFrame& writeStackFrame, String& key, Object& value)
at System.Text.Json.JsonSerializer.HandleDictionary(JsonClassInfo elementClassInfo, JsonSerializerOptions options, Utf8JsonWriter writer, WriteStack& state)
at System.Text.Json.JsonSerializer.Write(Utf8JsonWriter writer, Int32 originalWriterDepth, Int32 flushThreshold, JsonSerializerOptions options, WriteStack& state)
at System.Text.Json.JsonSerializer.WriteAsyncCore(Stream utf8Json, Object value, Type inputType, JsonSerializerOptions options, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
at Microsoft.AspNetCore.Mvc.Formatters.SystemTextJsonOutputFormatter.WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|29_0[TFilter,TFilterAsync](ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)

该问题的出现估计与.net 3.0 新引入的System.Text.Json类库有关.

折衷的解决办法是:

使用Content方法将 JObject 类型的返回值转为 ContentResult 类型.

伪代码如下:


[HttpPost]

public ContentResult Method1([FromBody]Param param1)
{

  JObject result=xxx;

  return Content(result.ToString());

}

如果有时间,建议跟一下System.Text.Json类库的源码来彻底解决该问题.

boto3 list_objects和list_objects_v2有什么区别?

boto3 list_objects和list_objects_v2有什么区别?

我正在尝试使用python在Amazon s3存储桶中列出对象boto3

似乎boto3有2个函数可以列出存储桶中的对象:list_objects()list_objects_v2()

两者之间有什么区别,使用一个相比另一个有什么好处?

C#中Array和object []有什么区别?

C#中Array和object []有什么区别?

我正准备使用Enum.GetValues(),并开始想知道它为什么返回System.Array而不是object [].它与ComVisible属性有关吗?

这导致了一个问题,Array和object []之间有什么区别,如果有的话?

我知道Array可以用于静态方法,而T []不能但是实例有区别吗?它们似乎具有相同的实例方法/属性.

如果没有区别,为什么Enum.GetValues()返回Array而不是object []?

解决方法

I was about to use Enum.GetValues() as normal,and started wondering why it returns a System.Array instead of object[].

因为object []会包含所有值.我们想要的是值本身的数组,而不是它们的盒装版本.

在泛仿制药C#中一般表示一般的唯一方法是Array.请记住,该API是CLR的第一个版本,缺少泛型.

在具有泛型的世界中,存在许多更好的可能设计.

坦率地说,在没有仿制药的世界中有更好的设计.立即想到的两个是:(1)这可能是Type上的实例方法,(2)C#编译器可以在每个枚举类型上生成公共静态MyEnum [] GetValues()方法.

Is it something to do with the ComVisible attribute?

据我所知.

What is the difference between Array and object[],if any?

我不知道如何回答“有什么不同”的问题.如果我问你“长颈鹿和哺乳动物有什么区别?”你会怎么回答呢?这是一个奇怪的问题.

数组是对象的基类[]是我能告诉你的最好的.

I kNow Array can be used for static methods whilst T[] cannot but is there a difference for instances?

我也不明白这个问题.你能举一个“你可以用于静态方法”的例子吗?

也许你的意思是奇怪的是,通常你可以从派生类型访问类型的静态成员,但你不能使用数组类型?也就是说,你可以说:

class B { public static void M() {} } 
class D : B {}
...
B.M();
D.M(); // Same thing

这有效:

Array.sort(whatever);

但这不起作用:

int[].sort(whatever);

这是C#处理成员访问操作符的一个奇怪之处,但是如果你输入int []那就没什么好处的,这很奇怪.排序()赔率非常好,你做错了.

无论哪种方式,我都不知道它与你的问题有什么关系.你能澄清一下这个问题吗?

If there is no difference,why does Enum.GetValues() return Array instead of object[]?

这个问题是不连贯的.如果你告诉我“白宫”和“宾夕法尼亚大道1600号”是同一个地址,那么我说“好吧,如果没有区别,那么为什么特朗普总统住在白宫而不是1600宾夕法尼亚大道?”你怎么回答我的疯狂问题?如果没有区别那么没有区别,那为什么重要呢?

在这种情况下,问题是基于错误的前提,因为object []和Array是不同的.但目前的问题无法回答.

我们今天的关于JSON 和 Object Literal Notation 有什么区别?json和object的区别的分享就到这里,谢谢您的阅读,如果想了解更多关于@Temporal(TemporalType.DATE)和JSONObject.fromObject(jsonMap);共同存在、asp.net core 3.0 JObject The collection type ''Newtonsoft.Json.Linq.JObject'' is not supported、boto3 list_objects和list_objects_v2有什么区别?、C#中Array和object []有什么区别?的相关信息,可以在本站进行搜索。

本文标签: