我有一个常规ASP.Net网络表单(不是Web服务),我正在尝试吐出JSON数据,然后我尝试使用它。我有两个问题。
第一个是处理输出JSON数据:
var reader2 = command.ExecuteReader();
while (reader2.Read())
{
var json = Json.Encode(new{
code = reader2[1].ToString(),
Revenue = reader2[4].ToString()
});
Response.Write(json);
}
reader2包含238个不同的条目。现在上面的Response.Write(json)返回238个单独的json字符串:
{"code":"123","Revenue":"90.0000"}{"code":"234","Revenue":"90.0000"}
如果我将它们分组为1个记录集,我认为以后(对于问题2)可能会有所帮助。
{“records”:[{“code”:“123”,“Revenue”:“90.0000”},{ “code”:“234”,“Revenue”:“90.0000”}}}
如何使用阅读器以及System.Web.Helpers.Json
第二个问题可能是我当前如何从第一个问题输出JSON数据的直接结果。最终,我希望能够使用此功能读取问题1中输出的内容。现在我设置了我的dataType: "html"
,因为这是我唯一可以归还的东西。但是,这给了我msg
32000 +的长度......有些事情是不对的。
如何才能从ASPX页面读取JSON数据输出?
function populateResults(code, district, year) {
$.ajax({
type: "GET",
url: "regular.aspx",
data: "code=" + code + "year=" + year,
dataType: "html",
success: function (msg) {
var results = msg;
$.each(results, function (index, result) {
console.log(result.code);
});
}
});
答案 0 :(得分:1)
在我的评论之后重新阅读这个问题,现在更清楚一点,“32000”通常不是太多的数据,只是数据被视为一个大字符串而不是作为一个对象数组。
这可能是因为数据类型是HTML,这可能是必要的,因为它没有将响应视为格式正确的JSON。我认为你是正确的,它需要被“分组”,虽然它可能不需要像这样包装在父对象中。尝试使用[
进行前置,附加]
,然后用逗号分隔。也许是这样的:
var reader2 = command.ExecuteReader();
Response.Write("[");
var firstRecord = true;
while (reader2.Read())
{
if (!firstRecord)
Response.Write(",");
firstRecord = false;
var json = Json.Encode(new{
code = reader2[1].ToString(),
Revenue = reader2[4].ToString()
});
Response.Write(json);
}
Response.Write("]");
我不得不在那里投入一点逻辑来确定何时包含逗号,因为你不想在第一条记录之前或在最后一条记录之后。可能有一种更优雅的方式,特别是如果您知道来自reader2
的计数。但希望你明白了。
这应该会产生更像这样的东西:
[{"code":"123","Revenue":"90.0000"},{"code":"234","Revenue":"90.0000"}]
浏览器本身应可解释为JSON。这应该允许您设置数据类型:
dataType: "json"
反过来,应该在msg
中为您提供所需内容。
编辑:您可以通过将reader2
的输出转换为对象的枚举并在整个事物上使用Json.Encode()
来进一步简化此操作。也许是这样的:
var records = new List<CustomRecord>();
while (reader2.Read())
{
records.Add(new CustomRecord {
code = reader2[1].ToString(),
Revenue = reader2[4].ToString()
});
}
Response.Write(Json.Encode(records));
有一个简单的自定义对象:
class CustomRecord
{
public string code { get; set; }
public string Revenue { get; set; }
}