我有简单的asmx返回JSON:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class myWebService: System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public MyCustomClassObject GetTestData()
{
MyCustomClassObject x = new MyCustomClassObject();
x.PropertyA = "1";
x.PropertyC = "1";
return x;
}
C#类定义:
public class MyCustomClassObject
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
public string PropertyC { get; set; }
public object PropertyD { get; set; }
}
使用jquery$调用。ajax:
var jqxhr = $.ajax(
{
type: 'POST',
contentType: "application/json; charset=utf-8",
url: "/WebServices/myWebService.asmx/GetTestData",
data: parameters,
dataType: "json",
success: successLoadingData,
error: errorLoadingData,
complete: function () { $("#LoadingImage").hide(); }
});
我的JSON响应(带有不需要的空值):
{“PropertyA”:“1”,“PropertyB”:null,“PropertyC”:“1”,“PropertyD”:null}
问:如何仅使用JSON中的非空属性,尽可能多地使用我已经拥有的内容?
我在这里看到了一些答案,人们返回JSON对象和用JSON属性定义的属性,但我只是返回我的对象,webservice正在为我将其转换为JSON(由于Response.Format属性)。如果有必要,我会改变我的方法,但这是我的第一个JSON项目,所以我希望保持简单。谢谢
您可以递归地删除为null的属性,这里有一个片段可以做到这一点:
function removeNulls(obj){
var res = {};
for(var key in obj){
if (obj[key] !== null && typeof obj[key] == "object")
res[key] = removeNulls(obj[key]);
else if(obj[key] !== null)
res[key] = obj[key];
}
return res;
};
用法是removeNulls(jsonResult)
在此处查看它的实际操作
继续评论部分。即使你调用一个函数来删除空值,我个人的看法是,这是一个糟糕的设计,拥有一个字典和序列化,这是一种比在完成后删除我们不想要的属性更优雅的方式。
我会这样做:
public class MyCustomClassObject
{
public Dictionary<string, object> Foo { get; set; }
public MyCustomClassObject()
{
this.Foo = new Dictionary<string, object>();
}
}
public MyCustomClassObject GetTestData()
{
MyCustomClassObject x = new MyCustomClassObject();
x.Foo.Add("PropertyA", 2);
x.Foo.Add("PropertyC", "3");
return x.Foo;
}
这为您提供了一个更通用的对象来使用并更好地遵循JSON格式,因为理论上您可以将对象列表或数组作为值,这也更适合使用,因为您可以在此处添加Property tyD。
为什么您需要在添加值后删除值的东西?
我想从我的响应中排除name和age,但是当我收到JSON有效载荷请求时,我需要name和age字段-在我的业务逻辑之后,我想发送状态和消息作为JSON响应的一部分。姓名和年龄应该排除在外。我如何在Java中实现这一点? 我的控制器类:
问题内容: 我正在使用RestEasy并hibernate以返回Jackson的响应。我有一个bean播放器,具有以下字段:名称,id,年龄,位置。 现在,我正在实现两种重现json的rest方法。 ,这将返回一名玩家:姓名,身份证,年龄,位置。 ,这将返回玩家列表,但是有了这个玩家列表,我不想返回位置。 我的意思是,我该如何为一个响应添加一个字段,而对另一个响应忽略它。 请提出建议。 谢谢 问题
问题内容: 我有以下方法: 在这里,我将ResponseFormat属性设置为json,但仍将其作为XML返回。 我想使用此asmx服务进行json格式化有什么想法吗? 问题答案: 我遇到了同样的问题,并包含以下代码以使其正常工作。 更新: 要获得纯json格式,您可以使用如下的javascript序列化程序。 但是,这适用于复杂类型,但字符串没有任何区别。
问题内容: 我正在开发一个使用Spring-boot,关系数据库和Elasticsearch的应用程序。 我在代码的2个不同位置使用JSON序列化: 在REST API的响应中。 当代码与Elasticsearch交互时。 我在Elasticsearch中需要一些属性,但我想向应用程序用户隐藏(例如,来自关系数据库的内部ID)。 这是一个实体的例子: 问题 :当对象持久化在Elasticsearc
和使用它的字段: 当使用Solr分析工具时,一切看起来都很好。 查询部分如下: null null