Не удалось получить доступ к сложному объекту json с помощью jQuery

Вопрос:

У меня есть объект, который имеет частные свойства (доступный через геттеры и сеттеры и заданный в волшебной функции _sleep). Некоторые из этих частных свойств фактически представляют собой массивы объектов, которые сами по себе имеют частные свойства. Некоторые из этих свойств представляют собой массивы объектов и т.д. И т.д. Вниз по кроличьей дыре, куда мы идем.

Я хочу, чтобы json_encode родительский объект и все дочерние массивы объектов и т.д. И т.д.

Вот функция, которую я имею до сих пор:

json_encode(recursiveFlatten($contract));

function recursiveFlatten($object) {
$arr = array();
$return = array();

if (!is_array($object)) {
error_log("Preparing to flatten " . get_class($object));
$arr[] = $object;
} else {
error_log("Preparing to flatten array");
$arr = $object;
}

foreach ($arr as $object) {

error_log("Flattening " . get_class($object));

$flattenedObject = array();
foreach (get_class_methods(get_class($object)) as $method) {
error_log("Should I flatten " . $method . "?");
if (startsWith($method, "get")) {
error_log("Yes, flattening " . $method);
$parameter = lcfirst(substr($method, 3));
$value = $object->$method();

if (is_array($value)) {
error_log($method . " gives " . $parameter . " which yields an array value... recursing");
$value = recursiveFlatten($value);
error_log("Recursion yielded the following value: " . $value);
}

error_log($method . " gives " . $parameter . " which is not an array so it value is " . $value);

error_log("Assign " . $parameter . " to flattenedObject with value " . $value);

$flattenedObject[$parameter] = $value;
}
}

$return[] = $flattenedObject;
}

return $return;
}

Но это возвращает json, который не подходит мне.

[
{
"accountId":"7",
"billingContactId":"1",
"designFeeId":"295",
"id":"1",
"isDeleted":"0",
"leadSourceId":"1",
"managerId":"415",
"notes":"A note",
"prodContactId":"1",
"statusId":"1",
"tradedValue":"0",
"createdById":"415",
"createdDate":"2013-07-02 10:05:53",
"designFeeValue":"295",
"doInvoice":"0",
"isPaper":"1",
"primaryContactId":"1",
"firstMonthDisplay":"01\/2014",
"managerDisplayName":"Lynn Owens",
"numInsertions":3,
"statusText":"Proposal",
"totalValue":75,
"paidValue":50,
"unpaidValue":25,
"insertions":[
{
"adId":"1",
"contractId":"1",
"createdById":"415",
"createdDate":"2013-07-02 16:09:19",
"earlyOut":"0",
"id":"1",
"isCanceled":"0",
"magazineId":"1",
"month":"1",
"notes":"insertion one",
"paidValue":"25",
"value":"25",
"year":"2014"
},
{
"adId":"1",
"contractId":"1",
"createdById":"415",
"createdDate":"2013-07-02 16:10:03",
"earlyOut":"0",
"id":"2",
"isCanceled":"0",
"magazineId":"1",
"month":"2",
"notes":"insertion two",
"paidValue":"25",
"value":"25",
"year":"2014"
},
{
"adId":"1",
"contractId":"1",
"createdById":"415",
"createdDate":"2013-07-02 16:10:03",
"earlyOut":"0",
"id":"3",
"isCanceled":"0",
"magazineId":"1",
"month":"3",
"notes":"insertion three",
"paidValue":"0",
"value":"25",
"year":"2014"
}
]
}
]

Я вижу здесь, что параметр «insertions» родительского объекта, который представляет собой массив из трех вставленных объектов, сам по себе не является одним параметром с тремя дочерними вставками, а тремя параметрами «вставки».

Это правильно?

Когда я пытаюсь получить доступ к отдельным объектам вставки на стороне клиента с помощью javascript, мне не повезло.

// Set the account details
$.ajax({
type: 'POST',
url: 'ajaxController.php',
dataType: 'json',
data: {
e: "getContractById",
contractId: selectedContractId
},
success: function (data, textStatus, jqXHR) {
console.log(data);
console.log(data.accountId);
console.log(data.insertions);
$.each(data.insertions, function(key, insertion) {
console.log(insertion.notes);
});
}
});

Это печать:

[The JSON]
undefined
undefined
Type error, e is undefined (jquery.min.js)

Я чувствую, что я делаю какую-то простую ошибку, но я не могу, чтобы жизнь меня увидела.

Пожалуйста помоги? Я застрял в том, что я просто смотрел на это слишком долго.

Лучший ответ:

пытаться:

data[0].accountId
// or
data[0]['accountId']

Ответ №1

ваши данные представляют собой массив, в котором есть 1 элемент, вы попробовали следующее в своем javascript:

data[0].accountId;
data[0].insertions;

Оцените статью
TechArks.Ru
Добавить комментарий