ОК, вот тощий. Это массив!
$. IsArray (val) вернет true и идентифицирует его как таковой, и его можно повторить с помощью $ .each (); так же, как и другие объекты.
Это допустимая структура объекта из допустимого JSON, и ее можно избежать, используя опцию JSON_FORCE_OBJECT в PHP json_encode (); функция. Для моих нужд лучше не форсировать объект, потому что я также имею дело с массивами целых чисел, которые я хочу вернуть в одной строке.
Для своих нужд я изменил первый if () в моей функции отвода от этого ...
if((val == '[object Object]') && (typeof val == 'object')){
к этому ...
if((val != null) && (typeof val == 'object') &&
((val == '[object Object]') || (val[0] == '[object Object]'))){
Это будет соответствовать объектам или массивам объектов, а затем отправлять их обратно в resurse ();
Как ни странно, Javascript жалуется, когда val равен нулю, и мы тестируем против val [0]. Я думаю, это, вероятно, имеет смысл, потому что вы не просто проверяете значение, вы также пытаетесь погрузиться в нулевой объект.
Спасибо за ваше внимание, я выяснил свою проблему, и теперь у меня есть учетная запись на Stackoverflow. Это беспроигрышный вариант!
Еще раз спасибо.
Пропустить
Вот пересмотренная сборкаULfromOBJ (); функция ...
function buildULfromOBJ(obj){
var fragments = [];
//declare recursion function
function recurse(item){
fragments.push('<ul>'); // start a new <ul>
$.each(item, function(key, val) { // iterate through items.
if((val != null) && (typeof val == 'object') && // catch nested objects
((val == '[object Object]') || (val[0] == '[object Object]'))){
fragments.push('<li>[' + key + '] =></li>'); // add '[key] =>'
recurse(val); // call recurse to add a nested <ul>
}else if(typeof(val)=='string'){ // catch strings, add double quotes
fragments.push('<li>[' + key + '] = \"' + val + '\"</li>');
}else if($.isArray(val)){ // catch arrays add [brackets]
fragments.push('<li>[' + key + '] = [' + val + ']</li>');
}else{ // default: just print it.
fragments.push('<li>[' + key + '] = ' + val + '</li>');
}
});
fragments.push('</ul>'); // close </ul>
}
// end recursion function
recurse(obj); // call recursion
return fragments.join(''); // return results
} // end buildULfromJSON()
Два верхних варианта - просто сделать симпатичный вывод и помочь разграничить строки и литералы. Они могут быть удалены, чтобы оптимизировать поток.
Вот тот же фрагмент, который я выложил ранее, на этот раз правильно отформатированный ...
<snippet>
[text] = "#Hashtag @PithyTwits @LuvsIt2 http://link1.com http://link2.com http://link3.com"
[retweet_count] = 0
[entities] =>
[hashtags] =>
[0] =>
[text] = "Hashtag"
[indices] = [0,8]
[user_mentions] =>
[0] =>
[indices] = [9,20]
[screen_name] = "PithyTwits"
[name] = "[object Object]"
[id_str] = "258175966"
[id] = 258175966
[1] =>
[indices] = [21,29]
[screen_name] = "LuvsIt2"
[name] = "Strictly Indifferent"
[id_str] = "255883555"
[id] = 255883555
[urls] =>
[0] =>
[indices] = [30,46]
[url] = "http://link1.com"
[expanded_url] = null
[1] =>
[indices] = [47,63]
[url] = "http://link2.com"
[expanded_url] = null
[2] =>
[indices] = [64,80]
[url] = "http://link3.com"
[expanded_url] = null
[in_reply_to_screen_name] = null
</snippet>
Обратите внимание, что [entity] [user_mentions] [0] [name] = "[object Object]" я вставил это, чтобы гарантировать, что строковые значения не нарушают код. Также обратите внимание на элементы [индексы]. Это те массивы, которые я предпочитаю видеть в одной строке (я получаю анальный за глупые вещи :))
Еще раз спасибо!