如何使用React和JavaScript将.txt文件转换为JSON

如何使用React和JavaScript将.txt文件转换为JSON,javascript,json,Javascript,Json,我有一个.txt格式的文件,我的问题是如何将此文件中的文本转换为JSON格式(我希望将来将此JSON发送到服务器) 我有,从这个地方得到这个文件 我只使用React和Redux。不是JQUERY 以下是我从用户上传文件时的代码: class AddFilm extends Component { constructor() { super(); this.state = {}; } handleselectedFile = event =>

我有一个.txt格式的文件,我的问题是如何将此文件中的文本转换为JSON格式(我希望将来将此JSON发送到服务器)

我有,从这个地方得到这个文件

我只使用React和Redux。不是JQUERY

以下是我从用户上传文件时的代码:

class AddFilm extends Component {
    constructor() {
      super();
      this.state = {};
    }
    handleselectedFile = event => {
      this.setState({
        selectedFile: event.target.files[0],
        loaded: 0
      });
    };
    openFile(event) {
      let input = event.target;

      let reader = new FileReader();
      reader.onload = function() {
        let text = reader.result;
        console.log(reader.result.substring(0));

      };
      reader.readAsText(input.files[0]);
    }
    render() {
      return (
        <div className="import-film container">
          <div className="import-form">
            <h3>Choose file to import</h3>
            <input
              type="file"
              name=""
              id=""
              onChange={event => this.openFile(event)}
            />
            <button onClick={this.handleUpload}>Upload</button>
          </div>
        </div>
      );
    }
  }
);
export default ImportFilm;

谢谢你的回答

如果您的txt文件是一致的,那么类似的方法也可以:

const data=`标题:炽热的鞍座
发行年份:1974年
格式:VHS
明星:梅尔·布鲁克斯、克莱冯·利特尔、哈维·科曼、吉恩·怀尔德、斯利姆·皮肯斯、玛德琳·卡恩
标题:卡萨布兰卡
发行年份:1942年
格式:DVD
明星:汉弗莱·鲍嘉、英格丽·伯格曼、克劳德·雷恩斯、彼得·洛尔
标题:猜字谜
发行年份:1953年
格式:DVD
明星:奥黛丽·赫本、卡里·格兰特、沃尔特·马修、詹姆斯·科本、乔治·肯尼迪
标题:酷手卢克
发布年份:1967年
格式:VHS
明星:保罗·纽曼、乔治·肯尼迪、斯特罗瑟·马丁`
console.log(data.split('\n\n').map(条目=>{
常量obj={}
entry.split('\n').forEach(keyValue=>{
const split=keyValue.split(“:”)
常量键=拆分[0]
常量值=拆分[1]
obj[key]=key==“Stars”?值。拆分(“,”):值
})
返回obj

}))
如果您的txt文件是一致的,那么类似的方法也可以:

const data=`标题:炽热的鞍座
发行年份:1974年
格式:VHS
明星:梅尔·布鲁克斯、克莱冯·利特尔、哈维·科曼、吉恩·怀尔德、斯利姆·皮肯斯、玛德琳·卡恩
标题:卡萨布兰卡
发行年份:1942年
格式:DVD
明星:汉弗莱·鲍嘉、英格丽·伯格曼、克劳德·雷恩斯、彼得·洛尔
标题:猜字谜
发行年份:1953年
格式:DVD
明星:奥黛丽·赫本、卡里·格兰特、沃尔特·马修、詹姆斯·科本、乔治·肯尼迪
标题:酷手卢克
发布年份:1967年
格式:VHS
明星:保罗·纽曼、乔治·肯尼迪、斯特罗瑟·马丁`
console.log(data.split('\n\n').map(条目=>{
常量obj={}
entry.split('\n').forEach(keyValue=>{
const split=keyValue.split(“:”)
常量键=拆分[0]
常量值=拆分[1]
obj[key]=key==“Stars”?值。拆分(“,”):值
})
返回obj

}))
这个问题很久以前就被问到了,但最近我正在寻找类似问题的解决方案,我找到了一个简单的方法来解决它。所以,如果有人仍然感兴趣,就在这里

您可以简单地使用JSON.parse,而不是使用所有这些操作

const convertToJSON=(数据)=>{
返回数据.split('\n\n').map(条目=>{
返回JSON.parse(条目);
});

}
这个问题很久以前就被问到了,但最近我正在寻找类似问题的解决方案,我找到了一个简单的方法来解决它。所以,如果有人仍然感兴趣,就在这里

您可以简单地使用JSON.parse,而不是使用所有这些操作

const convertToJSON=(数据)=>{
返回数据.split('\n\n').map(条目=>{
返回JSON.parse(条目);
});

}
@Anon您的方法应该是找到解析该文件的方法。数据的格式很好,并且遵循固定的模式,所以不会太难。逐行读。每个填充的行对应一个对象属性。
前面的任何内容都是属性的名称,后面的任何内容都是内容。因此,您可以创建一个空对象,并逐步将属性从文件添加到该对象中。当你到达一个空行时,是时候换一个新的对象了。创建每个对象后,将其添加到数组中。当你到达最后,字符串化数组,这就是你的JSON。这是一个NPM包,适合您的需要。我不知道您是否愿意使用它,因为您正在使用redux和react,我想您不会介意使用另一个package@ADyson哦,我知道,但不知道如何在JS中实现:(@Anon好的,你到底要做的是哪一部分?你已经读到了文件数据。现在你只需要按换行符和冒号字符分割数据。你不知道如何分割字符串吗?把问题分解成这些小步骤,我提到的一切在JavaScrip中都是很容易理解的简单任务t、 如果你不知道如何做一个特定的工作,那么研究就很容易了。不要把它当作一件大事来考虑,开始思考问题的每一个部分,然后一个一个地解决它们。@另外,你的方法应该是找到一种解析该文件的方法。数据格式良好,并且遵循固定的模式,所以这应该不会太难。你知道吗逐行添加。每个填充的行对应一个对象属性。
之前的任何内容都是属性的名称,之后的任何内容都是内容。因此,您可以创建一个空对象,并逐渐将文件中的属性添加到该对象中。当您到达一个空行时,是时候创建一个新对象了。将每个对象添加到一个数组中恩,你已经创建了它。当你结束时,字符串化数组,这就是你的JSON。这是一个适合你需要的NPM包。我不知道你是否愿意使用它,因为你正在使用redux和react,我想你不会介意使用另一个package@ADyson哦,我知道,但不知道如何在JS中实现:(@Anon好的,你到底要做的是哪一部分?你已经读到了文件数据。现在你只需要按换行符和冒号字符分割数据。你不知道如何分割字符串吗?把问题分解成这些小步骤,我提到的一切在JavaScrip中都是很容易理解的简单任务t、 如果你不知道如何做一项具体的工作,那么研究就很容易了。不要把它当作一项大工作,开始思考问题的每一部分,并逐一解决。
Title: Blazing Saddles
Release Year: 1974
Format: VHS
Stars: Mel Brooks, Clevon Little, Harvey Korman, Gene Wilder, Slim Pickens, Madeline Kahn

Title: Casablanca
Release Year: 1942
Format: DVD
Stars: Humphrey Bogart, Ingrid Bergman, Claude Rains, Peter Lorre

Title: Charade
Release Year: 1953
Format: DVD
Stars: Audrey Hepburn, Cary Grant, Walter Matthau, James Coburn, George Kennedy

Title: Cool Hand Luke
Release Year: 1967
Format: VHS
Stars: Paul Newman, George Kennedy, Strother Martin