如何格式化通过JSON作为数组发送的文本区域?

时间:2015-09-08 14:27:32

标签: ruby-on-rails arrays ruby json

我对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"]

我知道我可以删除所有额外的角色,但我觉得必须有更好的方法。有没有一种好的方法可以将其转换回文本区域的原始格式,或者至少将其转换为数组,以便我可以遍历每个项目并重新格式化它?

2 个答案:

答案 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']}

这至少可以为您提供包含所有值的数组。