javascript - 在json中,如何处理逗号分隔的对象 ( [object Object],[object Object] )?

  显示原文与译文双语对照的内容

我是新的,请跟我一起。 我正在处理 Twitter API,它严重依赖 JSON ( 这也不是什么坏事) 。

Twitter 做的事情是将一些值作为逗号分隔对象返回。 这似乎是独立于 [entities] 部分的,它列举了tweet中的链接。

这是我用来将json减少到无序列表的函数。 这段代码中注释出的部分是我需要帮助的。


function buildULfromJSON(data){


 var items = [];



 function recurse(json){//declare recursion function


 items.push('<ul>');//start a new <ul>



 $.each(json, function(key, val) {//iterate through json and test, treat vals accordingly



 if((val == '[object Object]') && (typeof val == 'object')){//this catches nested json lists


 items.push('<li>[' + key + '] =></li>');//adds '[key] =>'


 recurse(val);//calls recurse() to add a nested <ul>



 }else if(typeof(val)=='string'){//catch string values


 items.push('<li>[' + key + '] = "' + val + '"</li>');//add double quotes to <li> item



 }/* else if(typeof(val) == 'object'){//this throws exception in jquery.js


 $.each(val, function(){//when val contains [object Object],[object Object]


 items.push('<li>[' + key + '] =></li>');//need to test for and process 


 recurse(val);//comma seperated objects


 });


 } */else{


 items.push('<li>[' + key + '] = ' + val + '</li>');//non string, non object data (null, true, 123,. etc)


 }



 });


 items.push('</ul>');//close </ul>


 }//end recursion function



 recurse(data);//call recursion


 return items.join('');//return results


}//end buildULfromJSON()



下面是示例输出 Fragment,其中tweet包含一个标签。两个用户提到和三个 url 。 这些项作为逗号分隔的对象( json数据) 返回。 我完全失去了如何处理这个问题。 你们能提供的任何 direction 都是优秀的。

注意 [text] 字符串。它有助于将 [entities] 节置于上下文中。


<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] = [object Object],[object Object]


 [urls] = [object Object],[object Object],[object Object]


[in_reply_to_screen_name] = null


[in_reply_to_status_id_str] = null


</snippet>



我最重要的问题是,我不知道如何测试这些列表,而不需要 jquery.js 适合。 一旦我知道如何在代码中隔离这些列表,处理逗号分隔列表的字符串函数听起来不像完美。 欢迎任何建议。

谢谢你

跳过

时间: 原作者:

好的这是一个数组 !

$.isArray(val) 将与它的它对象相同,并且可以像它的他对象一样将它的标识为 return true 。

它是有效的对象结构,从有效 JSON,可以通过使用php函数 json_encode(); 中的JSON_FORCE_OBJECT选项来避免。 对于我的需求,最好不要强制对象,因为我还处理我想在一行中返回的整数数组。

根据我的需要,我改变了recusion函数中的第一个 if() 。


if((val == '[object Object]') && (typeof val == 'object')){



这个。


if((val!= null) && (typeof val == 'object') &&


 ((val == '[object Object]') || (val[0] == '[object Object]'))){



将 MATCH 对象或者对象数组发送回 resurse() ;

奇怪的是,当val为空并且我们对 val [0] 进行测试时,Javascript会发出警告。 我想这可以能是有意义的,因为你不只是在测试值,你也尝试进入空对象。

感谢你的注意,我发现了我的问题,我现在得到了Stackoverflow的帐户。 这是一个 win-win-win !

再次 感谢 。

跳过

下面是修改后的buildULfromOBJ(); 函数。


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()



前两个是简单的输出,并帮助deliniate在字符串和文本之间进行转换。 它们可以被移除以简化流动。

这是我之前发布的相同 Fragment,这一次格式正确。


<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>



注意,[entities] [user_mentions] [0] [name] ="[object Object]"是为了确保字符串值不会破坏代码。 请注意 [indices] 项目。 这些是我更喜欢在单线( 我把stupidest的东西:了) 上看到的数组

再次致谢 !

原作者:
...