代码之家  ›  专栏  ›  技术社区  ›  Brian Dolan

如何从chapel中的记录返回json字符串?

  •  2
  • Brian Dolan  · 技术社区  · 6 年前

    我有一些DTO记录定义为

    record NodeDTO{
      var id: int,
          name: string,
          community: int;
    }
    
    record LinkDTO {
      var source: int,
          target: int,
          strength: real;
    }
    
    record GraphDTO {
      var nodes:[1..0] NodeDTO,
          links:[1..0] LinkDTO;
      proc init() {}
    }
    
    proc Graph.DTO() {
      var dto = new GraphDTO();
      for key in this.verts.keys {
        dto.nodes.push_back(new NodeDTO(id=this.verts.get(key), name=key, community=1));
        for nbs in this.neighbors(key).keys {
          dto.links.push_back(new LinkDTO(source=this.verts.get(key), target=this.verts.get(nbs), strength=1.0));
        }
      }
      return dto;
    }
    

    但是当我 writeln(dto) 我得到

    (nodes = (id = 7, name = yondu, community = 1) (id = 1, name = star lord, community = 1) (id = 5, name = rocket, community =
     1) (id = 4, name = drax, community = 1) (id = 8, name = nebula, community = 1) (id = 3, name = groot, community = 1) (id = 2, name = gamora,
    community = 1) (id = 6, name = mantis, community = 1), links = (source = 7, target = 8, strength = 1.0) (source = 1, target = 4, strength = 1.
    0) (source = 1, target = 3, strength = 1.0) (source = 1, target = 2, strength = 1.0) (source = 5, target = 6, strength = 1.0) (source = 4, tar
    get = 5, strength = 1.0) (source = 3, target = 4, strength = 1.0) (source = 2, target = 4, strength = 1.0) (source = 6, target = 7, strength =
     1.0) (source = 6, target = 8, strength = 1.0))
    

    它不能正确地解释为json。我将此发送到浏览器 Chrest 作为一个网络服务器。如何让它在字符串周围加上引号,并完成所有好的jsony操作?

    1 回复  |  直到 6 年前
        1
  •  3
  •   mppf    6 年前

    目前,chapel的格式化i/o包括json支持。(请注意,在将来,这可能会被拉出以改进接口)。见 general conversions section of the formatted I/O documentation . 请注意,您可以使用 string.format , readf writef 访问格式化的I/O。

    在你的特殊情况下, string.format 可能是你想要的。 "%jt\n".format(dto) .