我在理解行为方面遇到了问题JSON.parse.JSON.parse应该只适用于字符串.但它似乎适用于只包含一个字符串(甚至是单引号)的数组,如果字符串只包含数字.
JSON.parse(['1234']) // => 1234
JSON.parse(['1234as']) // => throws error
JSON.parse(['123', '123']) // => throws error
Run Code Online (Sandbox Code Playgroud) 我在SO中看到了很多复杂的问题,不管某些复杂的结构是否被认为是有效的JSON.
但是在光谱的另一端呢?
"12345"
Run Code Online (Sandbox Code Playgroud)
以上是有效的JSON吗?
为什么:
JSON.parse('');
Run Code Online (Sandbox Code Playgroud)
产生错误?
Uncaught SyntaxError: Unexpected end of input
Run Code Online (Sandbox Code Playgroud)
如果它刚刚归来,那不是更合乎逻辑null吗?
以下是有效的JSON文本,还是它们的顶级值必须是数组或对象?
4.0
Run Code Online (Sandbox Code Playgroud)
"Hello World"
Run Code Online (Sandbox Code Playgroud)
true
Run Code Online (Sandbox Code Playgroud)
过去的相关问题,例如什么是最小有效JSON?,这个简单的字符串被认为是有效的JSON吗?已经得出结论,他们不是.这是基于RFC-4627中 JSON格式的描述,其中指出:
2. JSON语法
JSON文本是一系列标记.标记集包括六个结构字符,字符串,数字和三个文字名称.
JSON文本是序列化对象或数组.
Run Code Online (Sandbox Code Playgroud)JSON-text = object / array这些是六个结构特征:
[...]
但是,RFC-4627状态声明它"未指定任何类型的Internet标准".相反,JSON的官方标准是最近发布的ECMA-404.与RFC-4627不同,ECMA-404对有效JSON文本的描述不包括任何对象或数组的要求.例如,与上面引用最相似的部分缺少该要求:
4 JSON文本
JSON文本是由符合JSON值语法的Unicode代码点形成的标记序列.该组令牌包括六个结构标记,字符串,数字和三个文字名称标记.
六个结构代币:
[...]
鉴于这个新规范,编码的非数组非对象顶级值是否被认为是有效的JSON文本?
$.parseJSON("1")回报1.我希望这会抛出一个错误,因为这似乎不是形式的有效JSON:
{
"firstName": "John"
}
Run Code Online (Sandbox Code Playgroud)
为什么1解析正确?反正有没有让它反而引发错误.
我的json_encode函数有特殊字符的问题.
例如,我试试这个:
$string="Svr?ek";
echo "ENCODING=".mb_detect_encoding($string); //ENCODING=UTF-8
echo "JSON=".json_encode($string); //JSON="Svr\u010dek"
Run Code Online (Sandbox Code Playgroud)
如何正确显示字符串,JSON ="Svrček"?
非常感谢你.
根据JSON规范,表示空值的正确方法是文字null.
如果是这种情况,为什么WCF会返回空响应而不是null?这是一个错误还是在某处记录了这种行为?
完整的repro示例:
using System;
using System.ServiceModel;
using System.ServiceModel.Web;
[ServiceContract()]
public class Service1
{
[OperationContract(), WebGet(ResponseFormat = WebMessageFormat.Json)]
public string GetSomeString() { return "SomeString"; }
[OperationContract(), WebGet(ResponseFormat = WebMessageFormat.Json)]
public string GetNull() { return null; }
}
public class Host
{
public static void Main()
{
// Very simple WCF server
var host = new WebServiceHost(typeof(Service1), new Uri("http://localhost:8000/"));
host.AddServiceEndpoint(typeof(Service1), new WebHttpBinding() {
HostNameComparisonMode = HostNameComparisonMode.Exact
}, "");
host.Open();
Console.WriteLine("Service is running, press enter to …Run Code Online (Sandbox Code Playgroud) JSON值是字符串,数字,真,假,空有效JSON吗?就是,是
true
Run Code Online (Sandbox Code Playgroud)
一个有效的JSON文档?或者必须是一个数组/对象?
一些验证者接受这个(例如http://jsonlint.com/),而其他人则不接受(例如http://jsonschemalint.com/).RFC和json.org在这个问题上并不清楚.
大多数地方JSON的格式都是这样的
{
color: "red",
value: "#f00"
}
Run Code Online (Sandbox Code Playgroud)
要么
[
{ color: "red", value: "#f00" },
{ color: "red", value: "#f00" }
]
Run Code Online (Sandbox Code Playgroud)
我想问的是原始类型如string,bool,int也是JSON?
我找到了以下链接,
http://json-schema.org/latest/json-schema-core.html
https://zh.wikipedia.org/wiki/JSON
https://www.ietf.org/rfc/rfc4627.txt
http://www.c-sharpcorner.com/uploadfile/3d39b4/data-types-in-json/
和,
在RFC4627中它说
JSON可以表示四种基本类型(字符串,数字,布尔值和null)和两种结构化类型(对象和数组).
字符串是零个或多个Unicode字符序列[UNICODE].
对象是零个或多个名称/值对的无序集合,其中名称是字符串,值是字符串,数字,布尔值,空值,对象或数组.
数组是零个或多个值的有序序列.
术语"对象"和"数组"来自JavaScript的约定.
所以我把它读作纯字符串,数字布尔像
"a string"
100
true
Run Code Online (Sandbox Code Playgroud)
都是JSON,
但我的两位同事认为原始类型只能是对象的价值,
{ ASTRING : "astring" } 是JSON,
如果只有"a string",这不会被调用,因为它不是JSON格式,
我想我,我的同事可能不够专业,无法判断,
所以我想知道,纯粹的原始类型JSON?
.
另一个想法是,JSON被称为交换数据的便捷方式,但如果这种格式不支持纯字符串,
也就是说,如果我只是想抛弃一个字符串,我不能使用JSON来做它?
并且必须强迫它改变{ Message : "a message"},
并且不能使用我认为更简单的方式抛出"a message"...?