首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rescript操作JSON文件

Rescript操作JSON文件
EN

Stack Overflow用户
提问于 2022-10-21 13:24:18
回答 1查看 37关注 0票数 0

我有这个JSON文件。使用rescript,我想:

  • 读取文件。
  • 从文件中提取数据。
  • 写入结果生成一个新文件。

代码语言:javascript
复制
   {
       "name": "name",
       "examples": [
           {
               "input": [1,2],
               "result": 1
           },
           {
               "input": [3,4],
               "result": 3
           }
       ],
   }

我可以用JavaScript来完成这个任务

代码语言:javascript
复制
var file = Fs.readFileSync("file.json", "utf8");
var data = JSON.parse(file);
var name = data.name
var examples = data.examples
for (let i = 0; i< examples.length; i++){
    let example = examples[i]
    let input = example.input
    let result = example.result

    let finalResult = `example ${name}, ${input[0]}, ${input[1]}, ${result} \n`
    Fs.appendFileSync('result.txt',finalResult)
}

这是我尝试在Rescript和我遇到的问题写它。

代码语言:javascript
复制
let file = Node.Fs.readFileSync("file.json", #utf8)
let data = Js.Json.parseExn(file)
let name = data.name  //this doesn't work. The record field name can't be found

因此,我尝试了一种不同的方法(这有点有限,因为我指定了要提取的数据的类型)。

代码语言:javascript
复制
@module("fs")
external readFileSync: (
  ~name: string,
   [#utf8],
) => string = "readFileSync"

type data = {name: string, examples: array<Js_dict.t<t>>}

@scope("JSON") @val
external parseIntoMyData: string => data = "parse"

let file = readFileSync(~name="file.json", #utf8)
let parsedData = parseIntoMyData(file)
let name = parsedData.name
let example = parsedData.examples[0]
let input = parsedData.examples[0].input //this wouldn't work

也尝试使用Node.Fs.appendFileSync(...),我得到了appendFileSync在Node.Fs中找不到的值

还有别的方法可以做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-21 14:17:53

我不清楚为什么要使用Js.Dict.t<t>作为示例,以及这种类型的t指的是什么。您当然可以在这里使用Js.Dict.t,如果数据的形状不是静态的,这可能是有意义的,但是接下来您必须使用Js.Dict.get访问数据。似乎您想要使用记录字段访问代替,如果数据结构是静态的,您可以这样做,只要您正确地定义类型。从您给出的示例来看,这些类型定义应该可以实现您想要的结果:

代码语言:javascript
复制
type example {
  input: (int, int), // or array<int> if it's not always two elements
  result: int,
}

type data = {
  name: string,
  examples: array<example>,
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74154317

复制
相关文章

相似问题

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