我想使用来自公共Web服务https://api.rbp-zp.cz/1.3/services/district/的JSON输出,但看起来在这种情况下编码存在问题。 AFNetworking用于在这种情况下进行转换(通过特定的respondSerializer),如下所示:
var op = AFHTTPRequestOperation (request: request)
op.responseSerializer = AFJSONResponseSerializer()
但由于JSON结构无效而失败。
我自己尝试过转换,但没有结果
let rObject: AnyObject? = NSJSONSerialization.JSONObjectWithData(decodedData, options:.AllowFragments, error: nil)
当我将这个JSON从浏览器手动放入验证器http://jsonlint.com时,它说它的格式不正确。
奇怪的是,当我将JSON消息从我的日志中放入验证器时,结构就是有效的。
任何帮助都将不胜感激。
答案 0 :(得分:0)
#include <iostream>
#include <string.h>
using namespace std;
const int MAX = 50 ;
class infix
{
private :
char target[MAX], stack[MAX] ;
char *s, *t ;
int top, l ;
public :
infix() ;
void setexpr ( char *str ) ;
void push ( char c ) ;
char pop( ) ;
void convert( ) ;
int priority ( char c ) ;
void show( ) ;
};
infix::infix() //error
{
top = -1 ;
strcpy ( target, "" ) ;
strcpy ( stack, "" ) ;
l = 0 ;
}
void infix :: setexpr ( char *str )//error
{
s = str ;
// strrev ( s ) ;
l = strlen ( s ) ;
* ( target + l ) = '\0' ;
t = target + ( l - 1 ) ;
}
void infix :: push ( char c )//error
{
if ( top == MAX - 1 )
cout << "\nStack is full\n" ;
else
{
top++ ;
stack[top] = c ;
}
}
int main()
{
/* call ur function from here*/
}
在您的版本中,您没有将正确的参数传递给NSJSONSerialization并忘记转换结果。此外,最好检查可能的错误。最后一点:仅当您的值为String时,此方法才有效。如果它可能是另一种类型,最好像这样声明字典转换:
func convertStringToDictionary(text: String) -> [String:String]? {
if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {
var error: NSError?
let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) as? [String:String]
if error != nil {
println(error)
}
return json
}
return nil
}
let str = "{\"name\":\"James\"}"
let result = convertStringToDictionary(str) // ["name": "James"]
if let name = result?["name"] { // The `?` is here because our `convertStringToDictionary` function returns an Optional
println(name) // "James"
}
当然你还需要更改函数的返回类型:
let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: &error) as? [String:AnyObject]
答案 1 :(得分:0)
好的,所以解决方法是最终修剪那些有趣的角色,...不喜欢它但是很有效
let range:NSRange = NSMakeRange(0, res.length - 3);
let refinedData:NSData = res.subdataWithRange(range)
let resObject = NSJSONSerialization.JSONObjectWithData(refinedData, options:NSJSONReadingOptions.allZeros, error: &error) as! NSArray
resObject正确填充为NSArray现在