程序库: JSON

 

JSON:

JSON 格式的序列化和反序列化

Author: Kuzma Shevelev

 
Automated-Trading:

JSON

作者:库兹马-谢韦列夫

你能告诉我为什么该库只在俄罗斯人中显示吗?
。我认为这样不太可能被注意到,也不可能被使用,尽管我认为它在生成网络查询数据时会非常方便。

 
因为我使用的是jAson,所以还没看过你们的实现。你们的实现方式有什么优势吗?能做个比较吗?
JSON Serialization and Deserialization (native MQL)
JSON Serialization and Deserialization (native MQL)
  • www.mql5.com
Сериализация и десериализация JSON протокола. Портированный код со скоростной библиотеки С++.
 
Edgar Akhmadeev #:
因为我使用的是jAson,所以还没看过你们的实现。你们的实现方式有什么优势吗?能做个比较吗?

1.大小,20kb 对 30kb

2.允许灵活使用任何 JSON 结构
- 有定义值类型的方法,可以处理值可以是不同类型的情况
- 有获取对象键的方法,可以处理事先不知道键的情况
- 用户友好的库界面,使填充 JSON 结构的过程方便易懂

3.源代码清晰、易于阅读
- 可以轻松理解库的工作,使其工作原理透明化
- 库的结构清晰,可以方便地调试网络请求和响应
- 不使用操作符重载,提供了名称清晰的方法,使任何开发人员都能理解代码。

 
Kuzma Shevelev #:

您能告诉我为什么这个图书馆只在俄罗斯人中显示吗?
,我认为不太可能有人会注意到并使用它,尽管我认为它在生成网络查询数据时会非常方便。

因为代码库就是这样建立的(至少现在是这样)--默认情况下,代码只能在一种语言版本中注册(你也可以在英语分支中注册),只有在某些条件下才能转移到其他语言中(应该指定--通过受欢迎程度、版主命令或其他方式自动注册)。

至于 json 主题本身,algobook 中也有一个 toyjson.mqh 的简约 实现。

Учебник по MQL5: Расширенные средства языка / Проекты / Клиентская программа сигнального сервиса на MQL5
Учебник по MQL5: Расширенные средства языка / Проекты / Клиентская программа сигнального сервиса на MQL5
  • www.mql5.com
Итак, мы решили, что текст в сообщениях сервиса будет в формате JSON. В наиболее распространенном варианте, JSON представляет собой текстовое...
 
Kuzma Shevelev #:

1.大小,20 千字节与 30 千字节

2.允许灵活使用任何 JSON 结构
- 有定义值类型的方法,可以处理值可以是不同类型的情况
- 有获取对象键的方法,可以处理事先不知道键的情况
- 方便的库接口,使填充 JSON 结构变得方便易懂。

3.源代码清晰易读
- 可以轻松理解库的工作,使其工作原理透明化
- 清晰的库结构可以方便地调试网络请求和响应
- 不使用运算符重载,提供了名称清晰的方法,使任何开发人员都能理解代码。

在这里,我甚至决定看看什么是 "可理解的、人类可读的源代码":-)

划掉第 3 点--你和 jAson 的作者一样,连注释和文档都懒得写。对于用户来说,使用操作符更方便、更清晰,因此避免使用操作符与其说是优点,不如说是缺点。

 
Stanislav Korotky #:

因为代码库是这样制作的(至少现在是这样)--默认情况下,代码只能在一种语言版本中注册(您也可以在英文分支中注册),而移植到其他语言版本只能在某些条件下进行(应该指定--通过受欢迎程度、版主命令或其他方式自动进行)。

至于 json 主题本身,algobook 中也有 toyjson.mqh 的简约 实现。

我看了一下,真的有,我想甚至有一个非常好的版本

,但无论如何,我认为这个库会找到它的受众,他们会喜欢我实现的界面来使用它。

 
Kuzma Shevelev #:

您能告诉我为什么图书馆只显示在俄罗斯人中间吗?
,我认为不太可能有人会注意到并使用它,尽管我认为它在生成网络查询数据时会非常方便。

要想让英语读者看到您的代码,您应该把它发到英语论坛上。

进入英文论坛。


进入他们的代码库。



添加代码。


现在,一个论坛板块的代码不会自动复制到另一个板块,您必须自己动手。

 

使用 JAson 已经有很长一段时间了。现在我决定比较一下 3 个库的速度,包括书中的 ToyJson3。作为 json 样本,我使用了 Binance 对 "exchangeInfo "的响应,大小为 768 Kb。当库从字符串中读取时,它会被完整解析,然后我选择一个字符并读取其所有数据。结果:

JAson - 122 ms
ToyJson3 - 54 ms
json - 48 ms

此外,json 不仅可以反序列化,还可以序列化,Binance 期货 API 也需要它。我不知道其他库中是否有这个功能,因为很难解析其他人的代码。

但我不擅长 OOP,也完全不理解这种结构:

    JSON::Object* json1 = new JSON::Object()
        .setProperty("number", 123456)
        .setProperty("string", "text")
        .setProperty("boolean", true)
        .setProperty("object", new JSON::Object()
            .setProperty("number", 123456)
            .setProperty("string", "text")
            .setProperty("boolean", true)
            .setProperty("array", new JSON::Array())
        )
        .setProperty("array", new JSON::Array()
            .add(true) // 布尔型
            .add(123456) // 数量
            .add("string") // 字符串
            .add(new JSON::Object()
                .setProperty("number", 123456)
                .setProperty("string", "text")
            )
            .add(new JSON::Array()
                .add(true)
                .add(123456)
                .add("string")
            )
        );

    string exampleText = json1.toString();
 
平心而论,我也会研究 ToyJson3 - 那里已经做了一些节省内存的工作,这很重要。
 
Edgar Akhmadeev #:
我完全不理解这种结构
我没有看过库代码,但从你提供的片段来看,setProperty 和 Add 方法返回的是对象(this)的引用,因此你可以通过点再次引用类方法。 这样你就可以收集这种调用链。