将 SQLite 数据库放入 JSON 对象中,以便从 iOS 发送到服务器


Placing a SQLite database into a JSON object to send to a server from iOS

我正在尝试将我的整个本地sqlite数据库放在iOS设备上,并使用http post将其发送到我的服务器以将其插入MySQL数据库。我正在为我的数据库使用 FMDB,我有 5 个表要插入到一个对象中。我能够使用 php 在我的远程服务器上执行此操作,但不确定如何在 xcode 中执行此操作。这是我发送对象的代码,但我不知道如何打包我从另一个答案中窃取的 JSON 对象(如何使用 HTTP 和 JSON 将 sqlite 数据库中的数据发送到服务器)

NSMutableURLRequest *request;
request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%d", [requestdata length]] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestdata];
//this kicks off the request asynchronously
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

我不建议使用 JSON 传输这样的大型 BLOB 数据,但如果绝对必须:

在这里,二进制数据必须通过 JSON 字符串发送。要从二进制文件中获取"字符串",您需要对二进制数据进行编码,最终生成"字符串"。例如,使用base64编码。此编码会将二进制数据转换为 ASCII 字符串。

然后,此字符串可用于 JSON 字符串:

杰森:

{
    "sqlite_database": "aJ6Fnh1nfh37sg20zBAskfh0QRb ..."
}

NSData具有对二进制数据进行编码的方法:base64EncodedDataWithOptions:base64EncodedStringWithOptions:

然后,您应该能够使用内容类型为 application/json 的 POST 请求发送此 JSON(不要使用"application/x-www-form-urlencoded")。