Обновление : Теперь, когда вы опубликовали фактический текст JSON, вот пример его использования:
$.getJSON(url, function(data) {
// jQuery will deserialize it into an object graph for
// us, so our `data` is now a JavaScript object --
// in this case, an array. Show how many entries we got.
display("Data received, data.length = " +
data.length);
// Show the start and end times of each entry
$.each(data, function(index) {
display("Entry " + index +
": Start = " + this.busyStartTime +
", end = " + this.busyEndTime);
});
});
Живая копия
Вывод:
Loading JSON from /aduji4/4...
Data received, data.length = 1
Entry 0: Start = /Date(928164000000-0400)/, end = /Date(928164000000-0400)/
Обратите внимание, что даты не обрабатываются автоматически, если вы не используете "reviver" с анализатором JSON, который понимает этот конкретный формат даты.У JSON нет собственного формата даты, но он имеет концепцию «reviver», которую можно использовать во время процесса десериализации для предварительной обработки значений.
У собственного анализатора JSON jQuery нет «reviver»"есть возможность, но вы можете скачать те, которые есть (их три на страница Дугласа Крокфорда на github - Крокфорд является изобретателем JSON).Тогда вы скажете jQuery , а не , анализировать JSON, и вместо этого сделаете это явно самостоятельно.Это будет выглядеть так:
// Start loading the JSON data
$.ajax({
url: url,
dataType: "text", // Tell jQuery not to try to parse it
success: function(data) {
// `data` contains the string with the JSON text.
// Deserialize it. jQuery's own JSON parser doesn't
// have the "reviver" concept, but this is where you
// would use one that does, giving it the reviver.
data = $.parseJSON(data);
// Now we have the object graph (an array in this
// case), show how many entries it has.
display("Data received, data.length = " +
data.length);
// Show the start and end times of each entry
$.each(data, function(index) {
display("Entry " + index +
": Start = " + this.busyStartTime +
", end = " + this.busyEndTime);
});
},
error: function() {
display("Error loading JSON");
}
});
Живая копия
... за исключением того, что вы, конечно, будете использовать другой синтаксический анализатор JSON, а не $.parseJSON
.
Оригинальный ответ :
Проблема
Я создал службу отдыха wcf, которая дает этот тест JSON-ответ.
Это не JSON.Вы можете прочитать о JSON здесь , и вы можете проверить свои строки JSON здесь .Я не совсем уверен, что это такое.Он очень похож на XML, но, как кто-то взял XML из средства просмотра дерева или чего-то такого (эти -
символы рядом с началами элементов).
Ниже я покажу, как эти данные могут выглядетькак в JSON, как вы будете работать с ним, а затем, если вы хотите вместо этого работать с XML, тот же пример с использованием данных XML.
Ваши данные в формате JSON
Вот идеякак это может выглядеть в JSON:
{
"ArrayOfBusyDateTime": [
{
"busyEndTime": "2011-04-20T10:30:00",
"busyStartTime": "2011-04-20T10:00:00",
"endGradient": 0,
"startGradient": 0,
"status": "busy"
},
{
"busyEndTime": "2011-04-20T13:00:00",
"busyStartTime": "2011-04-20T12:00:00",
"endGradient": 0,
"startGradient": 0,
"status": "busy"
}
]
}
Обратите внимание, что типы (имена элементов) исчезли, потому что в JSON нет понятия имен элементов.(Если вы хотите их, вы можете создать ключ, который содержит соответствующую информацию.) Таким образом, каждая из двух записей в массиве является busyDateTime
в силу того, что находится в ArrayOfBusyDateTime
.Но одна из особенностей JSON заключается в том, что он очень податлив, поэтому вы можете предпочесть сделать это немного по-другому.
Работа с этими данными JSON
Вот пример использования этих данных:
$.getJSON(url, function(data) {
// jQuery will deserialize it into an object graph for
// us, so our `data` is now a JavaScript object.
// Show how many entries we got in the array:
display("Data received, ArrayOfBusyDateTime.length = " +
data.ArrayOfBusyDateTime.length);
// Show the start and end times of each entry
$.each(data.ArrayOfBusyDateTime, function(index) {
display("Entry " + index +
": Start = " + this.busyStartTime +
", end = " + this.busyEndTime);
});
});
Живая копия
Вывод:
Loading JSON from /aduji4...
Data received, ArrayOfBusyDateTime.length = 2
Entry 0: Start = 2011-04-20T10:00:00, end = 2011-04-20T10:30:00
Entry 1: Start = 2011-04-20T12:00:00, end = 2011-04-20T13:00:00
XML
Для полноты, если ваши данные действительно являются XML, напримерэто:
<ArrayOfBusyDateTime xmlns="http://schemas.datacontract.org/2004/07/RestServiceTest" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<BusyDateTime>
<busyEndTime>2011-04-20T10:30:00</busyEndTime>
<busyStartTime>2011-04-20T10:00:00</busyStartTime>
<endGradient>0</endGradient>
<startGradient>0</startGradient>
<status>busy</status>
</BusyDateTime>
<BusyDateTime>
<busyEndTime>2011-04-20T13:00:00</busyEndTime>
<busyStartTime>2011-04-20T12:00:00</busyStartTime>
<endGradient>0</endGradient>
<startGradient>0</startGradient>
<status>busy</status>
</BusyDateTime>
</ArrayOfBusyDateTime>
Работа с данными XML:
... тогда вот как вы можете с этим работать:
$.ajax({
url: url,
dataType: "xml",
success: function(data) {
// jQuery will deserialize it for us, so our
// `data` is now an XML document. Wrap a jQuery
// instance around it to make it easy to work with.
data = $(data);
// Show how many entries we got in the array
var busyDateTimes = data.find("BusyDateTime");
display("Data received, ArrayOfBusyDateTime length = " +
busyDateTimes.length);
// Show the start and end times of each entry
busyDateTimes.each(function(index) {
// In this loop, `this` will be the raw XML
// element; again wrap a jQuery object around
// it for convenience
var $this = $(this);
display("Entry " + index +
": Start = " + $this.find("busyStartTime").text() +
", end = " + $this.find("busyEndTime").text());
});
},
error: function() {
display("Error loading XML");
}
});
Live copy
... хотя я не слишком много работаю с XML, можно добиться некоторой эффективности (кажется, что в экземплярах jQuery нужно много оборачиваться).
Вывод:
Loading JSON from /aduji4/2...
Data received, ArrayOfBusyDateTime length = 2
Entry 0: Start = 2011-04-20T10:00:00, end = 2011-04-20T10:30:00
Entry 1: Start = 2011-04-20T12:00:00, end = 2011-04-20T13:00:00