【问题标题】:Write data to JSON file将数据写入 JSON 文件
【发布时间】:2018-05-26 09:05:47
【问题描述】:

我正在尝试将习惯对象列表写入 JSON 文件,但我无法弄清楚。我这样做是因为我想将此 JSON 文件与 node.js 一起使用。

我创建了一个部分,其中包含一个名为“习惯”的类,我想用它来填充这个 JSON 文件,该部分本身从这段代码中获取习惯对象:

var addHabit = function () {
        var $new_habit = {
            "name":"",
            "value":0,
            "goal":0,
            "html": null
        }

        if ($(".habit-input input").val() !== "") {
            $new_habit.name = $("#habitinput .name").val();
            $new_habit.value = $("#habitinput .value").val();
            $new_habit.goal = $("#habitinput .goal").val();

            $new_habit.html = $("<p id="+uid+">").html("<span class=\"name\">"+$new_habit.name+"</span> <span class=\"val\">" + $new_habit.value + "</span>/" + "<span class=\"goal\">"+$new_habit.goal + "</span>"+
            "<button class=\"plus\">+</button><button class=\"min\">-</button><button class=\"delete\">x</button><button class=\"mod\">modify</button>");
            console.log($new_habit);
            $(".habits").append($new_habit.html);
            $(".habit-input input").val("");

            $("#"+uid + " .plus").on("click", function (event) {
                var val = parseInt( $(this).parent().find(".val").text());
                $(this).parent().find(".val").text( val+1 );
                event.preventDefault();
            });
            $("#"+uid + " .min").on("click", function (event) {
                var val = parseInt( $(this).parent().find(".val").text());
                $(this).parent().find(".val").text( val-1 );
                event.preventDefault();
            });
            $("#"+uid + " .delete").on("click", function (event) {
                $(this).parent().remove();
                event.preventDefault();
            });
            $("#"+uid + " .mod").on("click", function (event) {
                var val = parseInt( $(this).parent().find(".val").text());
                var name = parseInt( $(this).parent().find(".name").text());
                var goal = parseInt( $(this).parent().find(".goal").text());
                $(this).parent().find(".val").text(val = $("#habitinput .value").val());
                $(this).parent().find(".name").text(name = $("#habitinput .name").val());
                $(this).parent().find(".goal").text(goal = $("#habitinput .goal").val());
                event.preventDefault();
            });

            uid++;
        };
    };

我想将“习惯”部分读入 JSON 文件,以便在此 node.js 文件中使用它:

var express = require("express");
var url = require("url");
var http = require("http");
var fs = require('fs');

var port = 3000;
var app = express();
app.use(express.static(__dirname + "/client"));
//logger component
app.use(function (req, res, next) {
    console.log("[LOG] %s %s", new Date(), req.url);
    next();
});

http.createServer(app).listen(port);

//clients requests habits
app.get("/habits", function (req, res) {
    console.log("Habits requested!");
    res.sendfile('Habit/client/habits.json');
});

我希望实现的是,当我在浏览器中转到localhost:3000/habits 时,我会得到所有 JSON 格式的习惯对象。

当我去localhost:3000/habits时,我得到了这个{"type":"Buffer","data":[123,13,10,32,32,32,32,34,121,101,121,34,32,58,32,49,50,13,10,125]}

任何帮助将不胜感激

【问题讨论】:

  • 试试res.json(habits.toString())
  • 其实试试res.sendfile('Habit/client/habits.json').
  • 目前可用于显示 JSON 文件中的内容,但主要问题是写入 JSON 文件,对此有什么想法吗? (我将在您的解决方案中编辑问题)

标签: javascript jquery json node.js


【解决方案1】:

您从 GET/习惯中获得了缓冲。需要将其转换为您可以阅读的内容

尝试拨打toString('utf-8')

import bodyParser from 'body-parser';
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2012-08-31
    相关资源
    最近更新 更多