2012-10-16 264 views
0

我是JavaScript的新手,我试图将redis-cli INFO命令输出转换为JSON。字符串,我想转换为JSON是这样的将字符串转换为JSON

"redis_version:2.4.8\r\nredis_git_sha1:b85ba5fb\r\nredis_git_dirty:0\r\narch_bits:64\r\nmultiplexing_api:kqueue\r\ngcc_version:4.2.1\r\nprocess_id:6403\r\nuptime_in_seconds:963411\r\nuptime_in_days:11\r\nlru_clock:815387\r\nused_cpu_sys:67.32\r\nused_cpu_user:91.89\r\nused_cpu_sys_children:42.23\r\nused_cpu_user_children:132.57\r\nconnected_clients:2\r\nconnected_slaves:1\r\nclient_longest_output_list:0\r\nclient_biggest_input_buf:0\r\nblocked_clients:0\r\nused_memory:162549360\r\nused_memory_human:155.02M\r\nused_memory_rss:147972096\r\nused_memory_peak:191943360\r\nused_memory_peak_human:183.05M\r\nmem_fragmentation_ratio:0.91\r\nmem_allocator:libc\r\nloading:0\r\naof_enabled:1\r\nchanges_since_last_save:1\r\nbgsave_in_progress:1\r\nlast_save_time:1350325258\r\nbgrewriteaof_in_progress:0\r\ntotal_connections_received:187\r\ntotal_commands_processed:269264\r\nexpired_keys:180\r\nevicted_keys:0\r\nkeyspace_hits:202518\r\nkeyspace_misses:11675\r\npubsub_channels:0\r\npubsub_patterns:0\r\nlatest_fork_usec:2198\r\nvm_enabled:0\r\nrole:master\r\naof_current_size:159904546\r\naof_base_size:158667118\r\naof_pending_rewrite:0\r\naof_buffer_length:0\r\naof_pending_bio_fsync:0\r\nslave0:127.0.0.1,62716,online\r\ndb0:keys=356937,expires=0\r\n" 

任何指针如何将其转换为JSON对象是高度赞赏。谢谢!

回答

0

为什么不使用类似webdis为同样的目的?

默认情况下,Webdis回复是包含单个项目的JSON对象,将请求的命令名称映射到Redis回复。以下JSON类型用于:

Redis string → JSON string (GET, LPOP...) 
Redis multi-bulk data → JSON list (LRANGE, SMEMBERS...) 
Redis integer → JSON integer (INCR...) 
Redis status, error → list [bool, string] (PING, SET...) 

的JSONP查询字符串参数添加一个可选的包装功能部件,改变回复成JSONP调用。这使得可以在JavaScript应用中包含Webdis。

1

你可以做一些简单的像这样:

​var fields = str.split('\r\n'), result = {}; 
for(var i = 0, len = fields.length; i < len; ++i) { 
    var props = fields[i].split(':'); 
    if(props.length === 2) {   
     result[props[0]] = props[1]; 
    } 
} 

console.log(result);​​​​ 
console.log(JSON.stringify(result)); 

我在http://jsfiddle.net/uHtT3/1/创建的jsfiddle。

0

您是否尝试过使用eval

eval('[{"'+<yourString>+'"}]'); 

编辑

eval('({"'+<yourString>+'"})'); 

这里可能是一个JSON作为一个字符串,例如:

"a: 21, b:23" 

这对我的作品

var yourString = "redis_version:2.4.8\r\nredis_git_sha1:b85ba5fb\r\nredis_git_dirty:0\r\narch_bits:64\r\nmultiplexing_api:kqueue\r\ngcc_version:4.2.1\r\nprocess_id:6403\r\nuptime_in_seconds:963411\r\nuptime_in_days:11\r\nlru_clock:815387\r\nused_cpu_sys:67.32\r\nused_cpu_user:91.89\r\nused_cpu_sys_children:42.23\r\nused_cpu_user_children:132.57\r\nconnected_clients:2\r\nconnected_slaves:1\r\nclient_longest_output_list:0\r\nclient_biggest_input_buf:0\r\nblocked_clients:0\r\nused_memory:162549360\r\nused_memory_human:155.02M\r\nused_memory_rss:147972096\r\nused_memory_peak:191943360\r\nused_memory_peak_human:183.05M\r\nmem_fragmentation_ratio:0.91\r\nmem_allocator:libc\r\nloading:0\r\naof_enabled:1\r\nchanges_since_last_save:1\r\nbgsave_in_progress:1\r\nlast_save_time:1350325258\r\nbgrewriteaof_in_progress:0\r\ntotal_connections_received:187\r\ntotal_commands_processed:269264\r\nexpired_keys:180\r\nevicted_keys:0\r\nkeyspace_hits:202518\r\nkeyspace_misses:11675\r\npubsub_channels:0\r\npubsub_patterns:0\r\nlatest_fork_usec:2198\r\nvm_enabled:0\r\nrole:master\r\naof_current_size:159904546\r\naof_base_size:158667118\r\naof_pending_rewrite:0\r\naof_buffer_length:0\r\naof_pending_bio_fsync:0\r\nslave0:127.0.0.1".replace(/\r\n/g, ",").replace(/:/g, ": '").replace(/,/g, "' ,")+"'"; 
eval('({'+yourString+'})'); 

,或者如果您WA NT避免使用EVAL使用JSON.parse

JSON.parse(yourString); 
+0

我得到'未捕获的SyntaxError:意外的标记ILLEGAL'当我尝试... – Bill

+0

@bill:已经编辑我的答案。请试试这个。 – ZX12R

+0

在原始问题中使用字符串的结果相同。 – Bill