我有这个JSON文件。使用rescript,我想:
{
"name": "name",
"examples": [
{
"input": [1,2],
"result": 1
},
{
"input": [3,4],
"result": 3
}
],
}我可以用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和我遇到的问题写它。
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因此,我尝试了一种不同的方法(这有点有限,因为我指定了要提取的数据的类型)。
@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中找不到的值
还有别的方法可以做到这一点吗?
发布于 2022-10-21 14:17:53
我不清楚为什么要使用Js.Dict.t<t>作为示例,以及这种类型的t指的是什么。您当然可以在这里使用Js.Dict.t,如果数据的形状不是静态的,这可能是有意义的,但是接下来您必须使用Js.Dict.get访问数据。似乎您想要使用记录字段访问代替,如果数据结构是静态的,您可以这样做,只要您正确地定义类型。从您给出的示例来看,这些类型定义应该可以实现您想要的结果:
type example {
input: (int, int), // or array<int> if it's not always two elements
result: int,
}
type data = {
name: string,
examples: array<example>,
}https://stackoverflow.com/questions/74154317
复制相似问题