这可能是一个愚蠢的问题,但我有一个晚上.在我正在开发RESTful API的应用程序中,我们希望客户端以JSON格式发送数据.此应用程序的一部分要求客户端上载文件(通常是图像)以及有关图像的信息.
我很难跟踪单个请求中如何发生这种情况.是否可以将文件数据Base64转换为JSON字符串?我是否需要向服务器发送2个帖子?我不应该为此使用JSON吗?
作为旁注,我们在后端使用Grails,这些服务由本机移动客户端(iPhone,Android等)访问,如果其中任何一个有所不同.
考虑到以下因素,我们何时应该优先使用YAML而不是JSON,反之亦然?
我计划在嵌入式系统中使用这两个中的一个来存储配置文件.
我正在使用jQuery的自动完成功能.当我尝试检索超过17000条记录的列表(每条记录的长度不超过10条)时,它超出了长度并抛出错误:
异常信息:
异常类型:InvalidOperationException
异常消息:使用JSON JavaScriptSerializer进行序列化或反序列化时出错.字符串的长度超过maxJsonLength属性上设置的值.
我可以设置无限长度maxJsonLength的web.config?如果没有,我可以设置的最大长度是多少?
我在JSON中有一个简单的键/值列表,通过POST发送回ASP.NET.例:
{ "key1": "value1", "key2": "value2"}
Run Code Online (Sandbox Code Playgroud)
我并没有想要进入强大的.NET对象
我只需要一个普通的旧的Dictionary(Of String,String),或者一些等价的(hash table,Dictionary(Of String,Object),old-school StringDictionary - hell,一个2-D字符串数组对我有用.
我可以使用ASP.NET 3.5中的任何可用内容,以及流行的Json.NET(我已经将其用于序列化到客户端).
显然,这些JSON库都没有开箱即用的明显功能 - 它们完全专注于通过强大的合同进行基于反射的反序列化.
有任何想法吗?
限制:
是否存在用于从API构造JSON响应的标准或最佳实践?显然,每个应用程序的数据都是不同的,所以我不关心,而是"响应样板",如果你愿意的话.我的意思的一个例子:
成功要求:
{
"success": true,
"payload": {
/* Application-specific data would go here. */
}
}
Run Code Online (Sandbox Code Playgroud)
请求失败:
{
"success": false,
"payload": {
/* Application-specific data would go here. */
},
"error": {
"code": 123,
"message": "An error occurred!"
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个基本的词典如下:
sample = {}
sample['title'] = "String"
sample['somedate'] = somedatetimehere
Run Code Online (Sandbox Code Playgroud)
当我尝试做的时候,jsonify(sample)我得到:
TypeError: datetime.datetime(2012, 8, 8, 21, 46, 24, 862000) is not JSON serializable
我能做些什么,以便我的字典样本可以克服上述错误?
注意:虽然它可能不相关,但字典是从mongodb中检索记录生成的,当我打印输出时str(sample['somedate']),输出是2012-08-08 21:46:24.862000.
首先,一些定义:
PUT在第9.6节RFC 2616中定义:
PUT方法请求将所包含的实体存储在提供的Request-URI下.如果Request-URI引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本.如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.
PATCH在RFC 5789中定义:
PATCH方法请求将请求实体中描述的一组更改应用于Request-URI标识的资源.
另外根据RFC 2616第9.1.2节, PUT是幂等的,而PATCH则不是.
现在让我们来看一个真实的例子.当我/users使用数据进行POST {username: 'skwee357', email: 'skwee357@domain.com'}并且服务器能够创建资源时,它将响应201和资源位置(假设/users/1),并且/users/1将返回对GET的任何下一次调用{id: 1, username: 'skwee357', email: 'skwee357@domain.com'}.
现在假设我要修改我的电子邮件.电子邮件修改被视为"一组更改",因此我应该修补/users/1 " 补丁文档 ".在我的情况下,它将是一个json {email: 'skwee357@newdomain.com'}.然后服务器返回200(假设权限正常).这让我想到第一个问题:
PATCH是一个相对较新的动词(2010年3月引入的RFC),它解决了"修补"或修改一组字段的问题.在引入PATCH之前,每个人都使用PUT来更新资源.但是在引入PATCH之后,让我感到困惑的是当时使用的PUT是什么?这让我想到了第二个(也是主要的)问题:
/users替换整个集合.在引入PATCH之后,在特定实体上发布PUT是没有意义的.我错了吗?我有一个大对象,我想转换为JSON并发送.但它具有圆形结构.我想抛出任何存在的循环引用并发送任何可以进行字符串化的内容.我怎么做?
谢谢.
var obj = {
a: "foo",
b: obj
}
Run Code Online (Sandbox Code Playgroud)
我想将obj字符串化为:
{"a":"foo"}
Run Code Online (Sandbox Code Playgroud) 我需要将某个JSON字符串转换为Java对象.我正在使用Jackson进行JSON处理.我无法控制输入JSON(我从Web服务中读取).这是我的输入JSON:
{"wrapper":[{"id":"13","name":"Fred"}]}
Run Code Online (Sandbox Code Playgroud)
这是一个简化的用例:
private void tryReading() {
String jsonStr = "{\"wrapper\"\:[{\"id\":\"13\",\"name\":\"Fred\"}]}";
ObjectMapper mapper = new ObjectMapper();
Wrapper wrapper = null;
try {
wrapper = mapper.readValue(jsonStr , Wrapper.class);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("wrapper = " + wrapper);
}
Run Code Online (Sandbox Code Playgroud)
我的实体类是:
public Class Student {
private String name;
private String id;
//getters & setters for name & id here
}
Run Code Online (Sandbox Code Playgroud)
My Wrapper类基本上是一个容器对象,用于获取我的学生列表:
public Class Wrapper {
private List<Student> students;
//getters & setters here
}
Run Code Online (Sandbox Code Playgroud)
我一直收到这个错误,"包装"返回null.我不确定缺少什么.有人可以帮忙吗?
org.codehaus.jackson.map.exc.UnrecognizedPropertyException:
Unrecognized field …Run Code Online (Sandbox Code Playgroud) 我希望Ruby on Rails中的JSON输出"漂亮"或格式良好.
现在,我打电话to_json,我的JSON全部在一条线上.有时,如果JSON输出流中存在问题,则很难看到.
有没有办法配置或方法使我的JSON在Rails中"漂亮"或格式良好?
json ×10
rest ×2
asp.net ×1
asp.net-3.5 ×1
asp.net-ajax ×1
asp.net-mvc ×1
data-binding ×1
file-upload ×1
grails ×1
http ×1
http-method ×1
jackson ×1
java ×1
javascript ×1
json.net ×1
node.js ×1
pretty-print ×1
put ×1
python ×1
request ×1
response ×1
ruby ×1
yaml ×1