相关疑难解决方法(0)

在JSON中,为什么引用每个名字?

JSON规范说JSON是一个对象或数组.在物体的情况下,

对象结构表示为围绕零个或多个名称/值对(或成员)的一对花括号. 名称是一个字符串. ...

后来,规范说一个字符串被引号括起来.

为什么?

从而,

{"Property1":"Value1","Property2":18}
Run Code Online (Sandbox Code Playgroud)

并不是

{Property1:"Value1",Property2:18}
Run Code Online (Sandbox Code Playgroud)

问题1:为什么不允许名称/值对中的名称是不带引号的标识符?


问题2:在Javascript中评估时,上述两种表示之间是否存在语义差异?

javascript json

90
推荐指数
2
解决办法
2万
查看次数

使用Newtonsoft创建无效的Json-允许无效的对象吗?

我故意尝试使用Newtonsoft Json创建无效的JSON,以便放置ESI包含标签,该标签将获取另外两个JSON节点。

这是我的JsonConverter的WriteJson方法:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    mApiResponseClass objectFromApi = (mApiResponseClass)value;

    foreach (var obj in objectFromApi.GetType().GetProperties())
    {
        if (obj.Name == "EsiObj")
        {
            writer.WriteRawValue(objectFromApi.EsiObj);
        }
        else
        {
            writer.WritePropertyName(obj.Name);
            serializer.Serialize(writer, obj.GetValue(value, null));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

mApiResponseClass中的EsiObj只是一个字符串,但是需要将其写入JSON响应中,以便在不使用任何属性名的情况下进行解释-这样HSI ESI才能起作用。

当然,这会导致Json Writer发生异常,其值为:

Newtonsoft.Json.JsonWriterException:'状态对象中的令牌未定义将导致无效的JSON对象。路径“。”

有没有办法解决?

理想的输出是JSON格式,从技术上讲是无效的,并且看起来像这样:

{
value:7,
string1:"woohoo",
<esi:include src="/something" />
Song:["I am a small API","all i do is run","but from who?","nobody knows"]
}
Run Code Online (Sandbox Code Playgroud)

编辑: 使用ESI,我们可以使单个响应具有不同的缓存长度-即,我们可以将可以缓存很长时间的数据放置在JSON的某些部分中,并且仅获取更新的部分,例如那些依赖客户端的部分特定的数据。ESI不是特定于HTML的。(如下所示)通过支持这些标签的Varnish运行。不幸的是,要求我们仅发出1个文件作为响应,并且不需要客户进一步的要求。我们也不能更改响应-所以我不能只添加一个专门包含其他节点的JSON节点。

编辑2: “更多json节点”部分是通过ESI解决的,它向我们的后端进一步请求用户/客户端特定的数据,即另一个端点。预期的结果是,我们随后将原始JSON文档与后来的JSON文档无缝地合并在一起。(这样,原始文档可能会很旧,而特定于客户的文档可能会很新)

编辑3: 端点/ something将输出类似JSON的片段,例如:

teapots:[ {Id: 1, WaterLevel: 100, Temperature: 74, ShortAndStout: …
Run Code Online (Sandbox Code Playgroud)

c# json json.net esi

1
推荐指数
1
解决办法
331
查看次数

标签 统计

json ×2

c# ×1

esi ×1

javascript ×1

json.net ×1