Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在typescript中解析JSON数组_Javascript_Arrays_Json_Typescript_Parsing - Fatal编程技术网

Javascript 在typescript中解析JSON数组

Javascript 在typescript中解析JSON数组,javascript,arrays,json,typescript,parsing,Javascript,Arrays,Json,Typescript,Parsing,我想解析typescript中的数组 我的代码如下: interface MyObj { val1: string val2: string val3: string } const fs = require('fs') const file = 'test.json' const encode = 'utf8' const jsonString = '[{val1 : "test1", val2 : "test2", val3 : "test3"}, { val1 : "test

我想解析typescript中的数组

我的代码如下:

interface MyObj {
  val1: string
  val2: string
  val3: string
}

const fs = require('fs')
const file = 'test.json'
const encode = 'utf8'
const jsonString = '[{val1 : "test1", val2 : "test2", val3 : "test3"}, { val1 : "test4", val2 : "test5", val3 : "test3"}]'
fs.writeFile(file, JSON.stringify(jsonString))
fs.readFile(file, encode, (err, data) => {
  const objs = JSON.parse(data) as MyObj[]
  console.log(data)
  console.log(objs)

  for (const obj of objs) {
    console.log(obj)
    console.log(obj.val1)
    console.log(obj.val2)
    console.log(obj.val3)
  }

})
结果如下:

"[{val1 : \"test1\", val2 : \"test2\", val3 : \"test3\"}, { val1 : \"test4\", val2 : \"test5\", val3 : \"test6\"}]"
[{val1 : "test1", val2 : "test2", val3 : "test3"}, { val1 : "test4", val2 : "test5", val3 : "test6"}]
[
undefined
undefined
undefined
{
undefined
undefined
undefined
v
undefined
undefined
undefined
a
undefined
undefined
undefined
l
undefined
undefined
undefined
1
undefined
undefined
undefined
.
.
.
似乎
parse
已成功,但解析后可能存在一些错误语法,但无法找到它们

我的环境是:

  • MacOS 10.12.6

  • NPM 5.6.0

  • 打字稿2.9.1


非常感谢您的帮助。

您的代码有几个问题

首先,json语法要求您引用属性do
“val1”:“test1”
而不是
val1:“test1”

其次,您应该为导入使用
import fs=require('fs')
语法

第三,也是最重要的一点,将json作为字符串写入文件。
jsonString
已经是一个字符串,无需再次对其使用
stringify
。如果您这样做,解析的结果将是一个字符串,而不是一个对象数组

interface MyObj {
    val1: string
    val2: string
    val3: string
}

import fs = require('fs')
const file = 'test.json'
const encode = 'utf8'
const jsonString = '[{"val1" : "test1", "val2" : "test2", "val3" : "test3"}, { "val1" : "test4", "val2" : "test5", "val3" : "test3"}]'
fs.writeFileSync(file, jsonString);
fs.readFile(file, encode, (err, data) => {
    const objs = JSON.parse(data) as MyObj[]
    console.log(data)
    console.log(objs)

    for (const obj of objs) {
        console.log(obj)
        console.log(obj.val1)
        console.log(obj.val2)
        console.log(obj.val3)
    }

})

问题是对象中的键周围没有任何双引号(“),因此JSON无效,浏览器无法成功解析它

所以不是

{
  val1: "test1",
  val2: "test2",
  val3: "test3"
}
你应该

{
  "val1": "test1",
  "val2": "test2",
  "val3": "test3"
}

您可以随时检查网站上的JSON是否有效。

您的代码有几个问题

  • “[{val1:“test1”,val2:“test2”,val3:“test3”},{val1:“test4”,val2:“test5”,val3:“test3”}]”不是有效的JSON。
    在属性名称周围应该有双引号
  • 在将字符串写入文件之前先对其进行字符串化。然后在读回字符串后对其进行解析。这两个操作将有效地相互抵消,您将得到一个(格式不是很好的)JSON字符串
  • 您应该做的是将属性名用双引号括起来,并删除
    JSON.stringify
    。尽管您不完全清楚为什么将其写入一个文件只是为了读回它

    const jsonString = '[{"val1" : "test1", "val2" : "test2", "val3" : "test3"}, { "val1" : "test4", "val2" : "test5", "val3" : "test3"}]';
    fs.writeFile(file, jsonString);
    fs.readFile(file, encode, ...
    

    我想你的JSON字符串有问题。你能试试这个吗?“[{“val1”:“test1”……你救了我一天。