针对方法完成API调用之前的JSON响应和方法完成api调用之前的json响应失败这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.NETCore:从APIJSON响应中删除空字段、Ajax
针对方法完成API调用之前的JSON响应和方法完成api调用之前的json响应失败这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展.NET Core:从API JSON响应中删除空字段、Ajax 接收服务器返回的json响应方法、android – 知道Firebase何时完成API调用?、Apiary:是否可以记录JSON响应字段?等相关知识,希望可以帮助到你。
本文目录一览:- 方法完成API调用之前的JSON响应(方法完成api调用之前的json响应失败)
- .NET Core:从API JSON响应中删除空字段
- Ajax 接收服务器返回的json响应方法
- android – 知道Firebase何时完成API调用?
- Apiary:是否可以记录JSON响应字段?
方法完成API调用之前的JSON响应(方法完成api调用之前的json响应失败)
如何解决方法完成API调用之前的JSON响应?
那么有人可以帮助我解决此问题吗?我的json响应空了,因为它是在API调用完成之前将数据发送回去的。
我正在传递一堆称为问题的数据集,并对其进行映射以仅获取注释部分。从那里,我访问评论ID,以填充与该评论关联的作者数据。每次将数据推入数组。如果设置了超时,它会给我的API方法一些时间来获取数据,并且前端显示的数据是正确的。但是,如果我只是res.json(arr),则数据显示为空[]。
有什么比使用setTimeout方法更好的解决方案?
router.get("/:id/comments",(req,res) => {
Issue.findById(req.params.id)
.populate("comments")
.exec()
.then((findissue) => {
var arr = [];
findissue.comments.map((comment) =>
Comment.findById(comment._id)
.populate("author")
.exec()
.then((data) => arr.push(data))
.catch((err) => console.log(err))
);
//res.json(arr); //---Comes up as empty
setTimeout(() => { //---My soluiton
res.json(arr);
},6000);
});
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
.NET Core:从API JSON响应中删除空字段
在.NET Core 1.0(所有API响应)的全局级别上,如何配置Startup.cs,以便在JSON响应中删除/忽略空字段?
使用Newtonsoft.Json,您可以将以下属性应用于属性,但我希望避免将其添加到每个属性中:
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]public string FieldName { get; set; }[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]public string OtherName { get; set; }
答案1
小编典典[.NET Core 1.0]
在Startup.cs中,可以将JsonOptions附加到服务集合,并在其中设置各种配置,包括删除空值:
public void ConfigureServices(IServiceCollection services){ services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; });}
[.NET Core 3.1]
代替:
options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
用:
options.JsonSerializerOptions.IgnoreNullValues = true;
Ajax 接收服务器返回的json响应方法
1、什么是JSON?
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。这是百度百科给出的JSON的定义。
我理解的JSON是JS创建对象的一种方法,后来从JS中独立出来,作为一种字符串数据的表示法,被各种语言支持;相对于XML而言,比XML更加轻量级、简洁、处理速度更快;
2、JSON的两种格式:
JSON对象字符串格式:''{"key1":"value1","key2":"value2"}''
JSON数组字符串格式:''[value1,value2,value3,...]''
3、JSON 与 JS 对象的关系:
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
var obj = {a: ''Hello'', b: ''World''}; //这是一个对象,注意键名也是可以使用引号包裹的 var json = ''{"a": "Hello", "b": "World"}''; //这是一个 JSON 字符串,本质是一个字符串
4、JSON 和 JS 对象互转
浏览器提供的方法:
要实现从JS对象转换为 JSON 字符串,使用 JSON.stringify() 方法:
var json = JSON.stringify({a: ''Hello'', b: ''World''}); //结果是 ''{"a": "Hello", "b": "World"}''
要实现从 JSON 转换为JS对象,使用 JSON.parse() 方法:
var obj = JSON.parse(''{"a": "Hello", "b": "World"}''); //结果是 {a: ''Hello'', b: ''World''}
注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js
jquery提供的方法 :
$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象
Javascript提供的方法:
eval(''('' + jsonstr + '')''); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号
注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。
以上这篇Ajax 接收服务器返回的json响应方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
- ajax响应json字符串和json数组的实例(详解)
- Node.js如何响应Ajax的POST请求并且保存为JSON文件详解
- 原生JS实现Ajax跨域请求flask响应内容
- Js中使用hasOwnProperty方法检索ajax响应对象的例子
- 原生javascript的ajax请求及后台PHP响应操作示例
- 在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
- selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
- node.js中的http.response.getHeader方法使用说明
- node.js中的http.response.setHeader方法使用说明
- node.js中的http.response.removeHeader方法使用说明
- js 使用ajax设置和获取自定义header信息的方法小结
android – 知道Firebase何时完成API调用?
Value events are always triggered last and are guaranteed to contain updates from any other events which occurred before that snapshot was taken.
我理解这一点意味着只有在所有的onChildAdded调用完成之后,才会调用ValueEventListener.因此,我想我可以在onChildAdded函数中填充RecyclerView,然后在onSingleValueListener调用中填充我的RecyclerView,我可以简单地完成动画加载屏幕(已经开始在此函数调用之前进行动画化)并继续.但是,我遇到了一个问题,在这里我放了一些细节的System.out.println语句,发现在我的情况下,测试1被调用之前测试2被调用.这会导致问题,因为这实际上是我想要的相反的行为:我想要onChildAdded函数完成,然后调用打印出Test 1被调用的onSingleValueListener函数.有什么原因造成这种情况吗?这样吗?我会很乐意解释为什么会发生这种情况.谢谢!
public void getComments(final String postId,final Activity activity,final View fragmentView,final View progressOverlay) { final Firebase commentsRef = firebaseRef.child("/comments"); Firebase linkRef = firebaseRef.child("/posts/" + postId); linkRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { System.out.println("Test 1"); if (progressOverlay.getVisibility() == View.VISIBLE) { progressOverlay.setVisibility(View.GONE); AndroidUtils.animateView(progressOverlay,View.GONE,200); fragmentView.findViewById(R.id.rv_view_comments).setVisibility(View.VISIBLE); } } @Override public void onCancelled(FirebaseError firebaseError) { } }); linkRef.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot,String s) { commentsRef.child(dataSnapshot.getKey()).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Comment comment = dataSnapshot.getValue(Comment.class); System.out.println("Test 2"); application.getCommentsRecyclerViewAdapter().getCommentsList().add(comment); application.getCommentsRecyclerViewAdapter().notifyDataSetChanged(); } @Override public void onCancelled(FirebaseError firebaseError) { } }); } @Override public void onChildChanged(DataSnapshot dataSnapshot,String s) { } @Override public void onChildRemoved(DataSnapshot dataSnapshot) { } @Override public void onChildMoved(DataSnapshot dataSnapshot,String s) { } @Override public void onCancelled(FirebaseError firebaseError) { } }); }
解决方法
请将您的代码更新为新的Firebase 3.x.x API.
下面两个是独立的异步调用;根据用例,您可以使用其中一个侦听器来读取数据.
1. linkRef.addListenerForSingleValueEvent(new ValueEventListener() {}); 2. linkRef.addChildEventListener(new ChildEventListener() {});
您可以参考firebase文档来获取有关数据库侦听器的更多信息.
https://firebase.google.com/docs/database/android/retrieve-data
使用以下代码段,您可以检索并填充您的注释列表.
public void getComments(final String postId,final View progressOverlay) { DatabaseReference commentsRef = firebaseRef.child("/comments"); DatabaseReference linkRef = commentsRef.child("/posts/" + postId); linkRef.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // Iterate through data-snapshot,and update your Adapter dataset for (DataSnapshot snapshot : dataSnapshot.getChildren()) { Comment comment = snapshot.getValue(Comment.class); application.getCommentsRecyclerViewAdapter().getCommentsList().add(comment); } application.getCommentsRecyclerViewAdapter().notifyDataSetChanged(); // dismiss your loading progressbar if (progressOverlay.getVisibility() == View.VISIBLE) { progressOverlay.setVisibility(View.GONE); AndroidUtils.animateView(progressOverlay,200); fragmentView.findViewById(R.id.rv_view_comments).setVisibility(View.VISIBLE); } } @Override public void onCancelled(DatabaseError databaseError) { // Handle fail case here } });
希望这会帮助你!
Apiary:是否可以记录JSON响应字段?
我已经记录了GET语句和参数,但这并没有提供给用户的完整的文档.
所以,在下面的例子中,如何添加关于“OtherFields”的评论.这是否支持?或者我需要在其他地方做一个配套文件.
## View Applications [/cat{?sort}{&order}{&page}] ### List all Applications ### Get List of Applications [GET] + Parameters + sort (optional,string) ... `sort` parameter is used to specify which criteria to use for sorting. One of the following strings may be used: `"NAME","rating","QUALITY","RISKLEVEL",` + order (optional,string) ... `order` parameter is used to specify which order to use if sorting is used. One of the following strings may be used: `"ASC","DESC"` + page (optional,int ) ... `page` parameter is used to request subsequent catalog pages. + Response 200 (application/json) { "Catalog" : { "Page" : 0,"Count" : 6,"Applications" : [{ "UID" : "6882e96a-5da1-11e3-1111-3f24f45df3ad" "OtherFields: "" }] }}
解决方法
原始有效载荷可以描述为
### Get List of Applications [GET] + Response 200 (application/json) + Attributes + Catalog (object) + Page: 0 (number) - Number of the page + Count: 6 (number) - Count of *Lorem Ipsum* + Applications (array) - Some array of something + (object) + UID: `6882e96a-5da1-11e3-1111-3f24f45df3ad` + OtherFields + Body { "Catalog" : { "Page" : 0,"Applications" : [{ "UID" : "6882e96a-5da1-11e3-1111-3f24f45df3ad" "OtherFields": "" }] } }
注意,身体中的显式JSON是多余的,您可以完全跳过它.有关其他详细信息,请参阅API蓝图规范 – Attributes
关于方法完成API调用之前的JSON响应和方法完成api调用之前的json响应失败的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于.NET Core:从API JSON响应中删除空字段、Ajax 接收服务器返回的json响应方法、android – 知道Firebase何时完成API调用?、Apiary:是否可以记录JSON响应字段?的相关知识,请在本站寻找。
本文标签: