如何在json中处理逗号分隔的对象?([object object],[object object])
How to handle comma separated objects in json? ( [object Object],[object Object] )
我是新手,所以请原谅我。我正在处理严重依赖JSON的Twitter API(这不是一件坏事)。
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()
下面是示例输出的一个片段,其中tweet包含一个标签、两个用户提及和三个url。这些项以逗号分隔的对象列表(json data)返回。我完全不知道该如何处理这个问题。你们提供的任何方向都很好。
注意[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)将返回true并将其标识为true,并且可以使用$.each()进行迭代;和其他对象一样。
这是一个有效的对象结构,来自于有效的JSON,可以通过在PHP的json_encode()中使用JSON_FORCE_OBJECT选项来避免。函数。对于我的需要,最好不要强制对象,因为我还处理整数数组,我希望在单行上返回。
对于我的需要,我改变了第一个if()在我的回避函数从这个…
if((val == '[object Object]') && (typeof val == 'object')){
这个… if((val != null) && (typeof val == 'object') &&
((val == '[object Object]') || (val[0] == '[object Object]'))){
匹配对象或对象数组,然后将它们返回给resse ();
奇怪的是,当val为null时,Javascript会报错,我们测试val[0]。我想这可能是有意义的,因为你不只是测试值,你也试图潜入null对象。
谢谢你的关注,我找到了我的问题,我现在在Stackoverflow上有一个帐户。这是三赢!
再次感谢。
跳过
这是修改后的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()
前面的两个选项只是为了生成漂亮的输出,并帮助区分字符串和字面量。可以删除它们以简化流程。
这是我之前发布的相同的片段,这次格式化正确…
<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]项。这些是我更喜欢在一行中看到的数组(我对最愚蠢的东西感到肛门:))
再次感谢!
- 如何使用object.assign()从其他对象引用基本对象属性
- JSON.stringify和Object.keys在同一个对象上产生不同的结果
- 在使用object.create创建的对象中使用super
- JavaScript-从对象数组中输出随机OBJECT
- 什么是“;原型;通过JavaScript中的Object Literal Notation创建的对象的链接
- 'object对象'在firefox中,wehn引用了jquery
- 在 JavaScript 中依赖全局本机对象是否安全,尤其是 Object 对象
- 为什么 Object 对象中的某些属性不会在子对象中继承
- 设计:为什么JavaScript有单独的Function和Object对象,以及为什么它们有自己单独的原型对象
- 带有外部依赖项的Jasmine单元测试指令失败,类型错误:'[object对象]'
- (Object对象)没有方法效果
- 是object.x和object.y对象's在浏览器中的位置
- Object对象数组Json.字符串数组的字符串化
- Node.js Object对象没有方法'hasOwnProperty'
- 当试图为href获取attr时获取#[object对象]
- object对象转换为字符串数组
- 在Angular2应用程序中渲染JSON对象会得到“object”对象
- JSON返回Object对象
- 用一个所有对象都可以使用的函数扩充Object对象
- Knockout Javascript选择返回Object对象