首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在编译时迭代JSON,使用Dlang

在编译时迭代JSON,使用Dlang
EN

Stack Overflow用户
提问于 2021-04-10 23:00:11
回答 2查看 90关注 0票数 1

我想使用CTFE遍历JSON。我已经尝试了std.json和vibe.data.json,但是没有成功。我不确定我错过了什么。

代码语言:javascript
复制
import std.stdio;
import std.json;
import std.array;
import vibe.data.json;

void main()
{
    enum string config = `{ "ModelNames": [ "Bank", "Biller", "Aggregator" ] }`;
    const auto c1 = parseJSON(config);
    immutable auto c2 = parseJsonString(config);
    
    foreach (key; c1["ModelNames"].array)
        writeln(key.get!string);

    foreach (key; c2["ModelNames"])
        writeln(key.get!string);

    // static foreach (key; c1["ModelNames"].array)
    //  pragma(msg, key.get!string);

    // static foreach (key; c2["ModelNames"])
    //  pragma(msg, key.get!string);
}
EN

回答 2

Stack Overflow用户

发布于 2021-04-10 23:27:23

将您的逻辑封装到一个常规的D函数中,然后让编译器在编译时对其进行求值,方法是调用结果必须在编译时知道的上下文,比如在enum中使用结果

代码语言:javascript
复制
import std.algorithm.iteration;
import std.stdio;
import std.json;
import std.array;

void main()
{
    enum string config = `{ "ModelNames": [ "Bank", "Biller", "Aggregator" ] }`;

    static string[] getModelNames(string json)
    {
        auto c1 = parseJSON(json);
        return c1["ModelNames"].array.map!(item => item.str).array;
    }

    enum string[] modelNames = getModelNames(config);
    pragma(msg, modelNames);
}
票数 5
EN

Stack Overflow用户

发布于 2021-04-11 00:36:48

多亏了弗拉基米尔,他指定的技巧在std.json和vibe.data.json上都能完美地发挥作用。

代码语言:javascript
复制
import std.algorithm.iteration;
import std.stdio;
import std.json;
import std.array;
import vibe.data.json;

void main()
{
    enum string config = `{ "ModelNames": [ "Bank", "Biller", "Aggregator" ] }`;
    immutable auto c1 = parseJSON(config);
    immutable auto c2 = parseJsonString(config);
    
    static foreach (key; c1["ModelNames"].array.map!(item => item).array)
        pragma(msg, key.get!string);

    static foreach (key; c2["ModelNames"].array.map!(item => item).array)
        pragma(msg, key.get!string);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67035802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档