无法将JSON转换为正确的格式

时间:2015-08-20 06:10:45

标签: ios json swift web-services character-encoding

我想使用来自公共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消息从我的日志中放入验证器时,结构就是有效的。

任何帮助都将不胜感激。

2 个答案:

答案 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现在