我对Ruby很陌生,而且我正在使用它与API一起工作。在通过JSON POST请求发送给我之前,通过API发送的文本区域将转换为以下格式:
struct FS_Directory
{
uint8_t name[MAX_NAME_SIZE];
uint32_t num_files;
uint32_t num_children;
uint32_t id;
}__attribute__((packed));
struct FS_Direcory* get_children( uint32_t id )
{
uint32_t num_children, dir_offset;
struct FS_Directory *children;
num_children = dirs[get_index(id)].num_children;
dir_offset = get_dir_offset( id );
children = (struct FS_Directory*)malloc( num_children * sizeof( struct FS_Directory) );
memcpy( children, &dirs[dir_offset], num_children * sizeof( struct FS_Directory ) );
return children;
}
我得到的价值如下:
"Comment": [
"hdfdhgdfgdfg\r",
"This is just a test\r",
"Thanks!\r",
"- Kyle"
]
因此每一行都被分解为看起来像数组的东西。我的问题是,它的功能就像一个大字符串而不是一个有4个值的数组。我尝试使用comments = params["Comment"]
并只打印comments[0]
但两者都返回相同的结果,它只是将所有内容显示为字符串,即
comments
但是我需要在文本区域中显示它,即
["hdfdhgdfgdfg\r", "This is just a test\r", "Thanks!\r", "- Kyle"]
我知道我可以删除所有额外的角色,但我觉得必须有更好的方法。有没有一种好的方法可以将其转换回文本区域的原始格式,或者至少将其转换为数组,以便我可以遍历每个项目并重新格式化它?
答案 0 :(得分:1)
首先,摆脱那些丑陋的\r
:
comments.map!(&:chomp)
然后,将这些行加在一起:
comment = comments.join("\n") # using a newline
# OR, for HTML output:
comment = comments.join('<br>')
答案 1 :(得分:0)
您应该能够解析JSON并使用所有值填充哈希:
- (void)exportDidFinish:(AVAssetExportSession*)session
{
if(session.status == AVAssetExportSessionStatusCompleted){
NSURL *outputURL = session.outputURL;
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:outputURL]) {
[library writeVideoAtPathToSavedPhotosAlbum:outputURL
completionBlock:^(NSURL *assetURL, NSError *error){
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Video Saving Failed" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil, nil];
[alert show];
}else{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Video Saved" message:@"Saved To Photo Album" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
//[self loadMoviePlayer:outputURL];
}
});
}];
}
}
self.audioAsset = nil;
self.videoAsset = nil;
//[activityView stopAnimating];
//[activityView setHidden:YES];
这适用于所有有效的json 。 json语法的一个规则是
数据是名称/值对
您提供的json不提供值的名称,因此此方法可能无效。如果是这种情况,解析原始字符串和提取值也可以完成工作(虽然更麻烦)。
你可以如何做到这一点:
require 'json'
hash = JSON.parse(params["Comment"])
puts hash
=> {"Comment"=>['all', 'of', 'your', 'values']}
这至少可以为您提供包含所有值的数组。