标签: nsjsonserialization

JSONSerialization.jsonObject 导致 swift 4.0 和 4.2 中的内存泄漏

我正在开发一个 iOS 应用程序,使用 swift 4.0(4.2 有同样的问题)。

我为 Encodable 添加了扩展

extension Encodable{

    func toDict() throws -> [String:Any]? {
        let jsonEncoder = JSONEncoder()
        let jsonData = try jsonEncoder.encode(self)
        do{
            return try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any]
        }
        catch{
            return nil
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个 Encodable 类的实例,它的属性也属于 Encodable 类,并注意到在instance.toDict()经常调用时,我的应用程序使用的内存增加了很多。即使我不使用返回的结果也是如此,如果我返回 nil 并忽略JSONSerialization.jsonObject.

我确定是这一行导致了问题(忽略结果并返回 nil 仍然会导致问题,注释该行并返回 nil 将停止内存增加。

随着时间的推移,内存越来越大,toDict()被调用的次数也越来越多,我最终在 10 分钟内使用了 400MB。

有没有人遇到过这个问题?有解决办法吗?

memory-leaks ios nsjsonserialization swift

5
推荐指数
1
解决办法
1471
查看次数

检查API的响应是否是有效的JSON

有没有办法NSJSONSerialization检查是否NSData是有效的JSON?如果API由于某种原因返回无效的JSON,我不希望应用程序出错.

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
NSError *error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
Run Code Online (Sandbox Code Playgroud)

json objective-c ios ios5 nsjsonserialization

4
推荐指数
2
解决办法
1万
查看次数

iOS - NSJSONSerialization:无法将数据转换为字符串周围的字符串

我在解析JSON时收到此错误:

NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Unable to convert data to string around character 73053.) UserInfo=0x1d5d8250 {NSDebugDescription=Unable to convert data to string around character 73053.}
Run Code Online (Sandbox Code Playgroud)

有任何建议如何解决这个问题?

添加 正如错误报告中所述,解析器无法通过位置73053处的字符,即我的JSON响应中的"ø".据我所知,像Ø,Å,Æ等字符不应该是json解析器的问题?

xcode cocoa-touch objective-c ios nsjsonserialization

4
推荐指数
3
解决办法
1万
查看次数

iOS:NSJSONSerialization导致"数据参数为零"

我有一个NSURLConnection和所有适当的方法在一个视图控制器中工作.然后我将它移动到UICollectionViewController并在下面获得一个例外

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSError *jsonParsingError = nil;

//error right here!
    NSString
    *object = [NSJSONSerialization JSONObjectWithData:self.jsonReceivedData options:NSJSONReadingMutableContainers error:&jsonParsingError]; 

    if (jsonParsingError) {
        NSLog(@"JSON ERROR: %@", [jsonParsingError localizedDescription]);
    } else {
        NSLog(@"LIST: %@", object);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误是: *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'data parameter is nil'

有人有主意吗?

ios nsjsonserialization

4
推荐指数
1
解决办法
4980
查看次数

NSJSONSerialization输出数字为float?

我正在使用NSJSONSerialization将字典转换为JSON.

如果我在该字典中包含NSDecimalNumber(== 0),则输出为0.这是错的.0是一个int.我需要输出为0.0.

这就是我正在做的事情:

NSDecimalNumber *decimal = [[NSDecimalNumber alloc] initWithFloat:0.0f];
// when fed into NSJSONSerialization it outputs as 0
Run Code Online (Sandbox Code Playgroud)

有没有办法输出0.0

或者我的假设不正确吗?是0有效的浮动?

cocoa foundation ios nsjsonserialization

4
推荐指数
1
解决办法
747
查看次数

如何在断开Internet连接时处理NSJSONSerialization的崩溃

我在我的应用程序中实现了Web服务.我的方式很典型.

- (BOOL)application:(UIApplication *)application     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Web Service  xxx,yyy are not true data
    NSString *urlString =   @"http://xxx.byethost17.com/yyy";
    NSURL *url = [NSURL URLWithString:urlString];
    dispatch_async(kBackGroudQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL: url];
        [self performSelectorOnMainThread:@selector(receiveLatest:)     withObject:data waitUntilDone:YES];
    });   
    return YES;
}

- (void)receiveLatest:(NSData *)responseData {
    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization
                      JSONObjectWithData:responseData
                      options:kNilOptions
                      error:&error];
    NSString *Draw_539 = [json objectForKey:@"Draw_539"];
....
Run Code Online (Sandbox Code Playgroud)

控制台错误消息:

*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'data parameter is nil'

当我的iPhone连接到Internet时,该应用程序成功运行.但如果它断开连接到互联网,应用程序将崩溃NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 你能告诉我如何处理这个错误?有NSError帮助吗?

iphone json web-services ios nsjsonserialization

4
推荐指数
2
解决办法
7091
查看次数

如何在Objective-C中用JSON创建true/false

如何使用NSJSONSerialization dataWithJSONObject从NSDictionary中获取json中的true/false(而不是"true"/"false")?我应该在词典中存储哪些键才能获得该键?

json objective-c nsjsonserialization

4
推荐指数
1
解决办法
2860
查看次数

在Swift中使用数组序列化我自己的对象的更优雅的方法是什么

我有一个看起来像这样的类:

class Foo {
    var bar = Int()
}

class Bar {
    var baz = String()
    var arr = [Foo]()
}
Run Code Online (Sandbox Code Playgroud)

我有一个Bar结构的对象,我需要序列化为JSON:

let instance = Bar()
Run Code Online (Sandbox Code Playgroud)

通过标准库或某些第三方库实现它的更优雅方式是什么?

提前致谢.

serialization json ios nsjsonserialization swift

4
推荐指数
1
解决办法
1764
查看次数

序列化包含转义(反斜杠和双引号)的JSON字符串Swift返回格式错误的对象

我有这样的后端响应字符串:

{
    "status": "success",
    "data": "{\"name\":\"asd\",\"address\":\"Street 1st\"}"
}
Run Code Online (Sandbox Code Playgroud)

我认为问题是因为数据字符串中的双引号(“)。当我删除双引号时,序列化成功。但是响应来自后端,因此我必须处理它。

任何人都可以解决这个问题吗?

谢谢。

这是游乐场代码。

import Foundation
var jsonStr = """
{
"status": "success",
"data": "{\"name\":\"asd\",\"address\":\"Street 1st\"}"
}
"""
let data = jsonStr.data(using: .utf8)
if let d = data {
    do {
        let o = try JSONSerialization.jsonObject(with: d)
        print(o)
    } catch let e {
        print(e)
    }
} else {
    print("DATA conversion ERROR")
}
Run Code Online (Sandbox Code Playgroud)

json jsonserializer ios nsjsonserialization swift

4
推荐指数
1
解决办法
3015
查看次数

Solidity TypeError:类型集的对象不可 JSON 序列化

我在 VSCode 中运行代码并得到 TypeError: Object of type set is not JSON serializable。我刚开始学习编码,实在不懂,google了一下,也不知道JSON可序列化是什么意思。

from solcx import compile_standard
import json

# get the contract content
with open("./SimpleStorage.sol", "r") as file:
    simple_storage_file = file.read()

# compile the contract

compiled_sol = compile_standard(
    {
        "language": "Solidity",
        "sources": {"SimpleStorage.sol": {"content": simple_storage_file}},
        "settings": {
            "outputSelection": {
                "*": {
                    "*": {"abi", "metadata", "evm.bytecode", "evm.bytecode.sourceMap"}
                }
            }
        },
    },
    solc_version="0.6.0",
)

# creat json file dump the comiled code in it to make it more readable.
with open("compiled_code.json", …
Run Code Online (Sandbox Code Playgroud)

python nsjsonserialization solidity smartcontracts

4
推荐指数
1
解决办法
2520
查看次数