Javascript 为什么要将JSON.parse(str)解析为字符串?

Javascript 为什么要将JSON.parse(str)解析为字符串?,javascript,javascript-objects,jsonstore,Javascript,Javascript Objects,Jsonstore,我尝试使用JSON.parse;将字符串解析为JavaScript对象,但调用console.logobject.constructor.name时;之后,它给了我绳子 我尝试使用parse两次而不是一次,但后来它给了我一个错误 var userInput = document.getElementById("userInput"); var yes = document.getElementById("yes"); var no = document.getElementById("no");

我尝试使用JSON.parse;将字符串解析为JavaScript对象,但调用console.logobject.constructor.name时;之后,它给了我绳子

我尝试使用parse两次而不是一次,但后来它给了我一个错误

var userInput = document.getElementById("userInput");
var yes = document.getElementById("yes");
var no = document.getElementById("no");
var dataString = "";
const endpoint = 'https://www.jsonstore.io/4037b406bb44de85c5dd50eb1a6472bedb79f447e747412695637c2784cbe43f';

function writeToDatabase(arr) {
    alert(arr);
    (async function() {
            // Send a post request, saving some data
            post_response = await fetch(endpoint, {
                    method: 'POST',
                    headers: {
                            'Content-Type': 'application/json'
                    },
                    body: JSON.stringify(arr)
            });
            /*
            // console.log the result
            console.log(`POST response:`, await post_response.json())
            */
    })();
}
function readFromDatabase() {
    fetch(endpoint)
    .then(response => response.json())
    .then(data => {

    console.log(data);
        dataArr = data;
        console.log(dataArr);
  });
}

yes.onclick = function() {
    fetch(endpoint)
    .then(response => response.json())
    .then(data => {

        data = JSON.stringify(data);
        console.log("full data: " + data);

        data = JSON.parse(data);
        data = data['result'];

        data = JSON.stringify(data);
        console.log("result array only: " + data);

        data = JSON.parse(data);// object.contructor.name
        console.log("after parse: " + data);
        console.log("data type is: " + data.constructor.name);

        data[userInput.value] = "YES";
        console.log("final string to write to database: " + data);
        writeToDatabase(data);
    });
}



no.onclick = function() {
    dataString = "{"+userInput.value+": "+"NO"+"}"
    writeToDatabase(dataString);
}
我希望它能转换成Javascript对象,这样我就可以添加一个项目,但它仍然是一个字符串,所以我不能添加项目

代码:
查看:

这是URL上的数据:

{"result":"{test: NO}","ok":true}
然后,response.json将其转换为一个JavaScript对象,该对象具有两个属性,结果为字符串,ok为布尔值

data=JSON.stringifydata将其转换回JSON,与response.JSON的效果相反

data=JSON.parsedata;再次将其反转,使您获得前面提到的对象

数据=数据[‘结果’];提取result属性,为您提供字符串{test:NO}

data=JSON.stringifydata;为您提供该字符串的JSON表示形式

data=JSON.parsedata;将其反转,再次为您提供字符串

我尝试使用parse两次而不是一次,但后来它给了我一个错误

var userInput = document.getElementById("userInput");
var yes = document.getElementById("yes");
var no = document.getElementById("no");
var dataString = "";
const endpoint = 'https://www.jsonstore.io/4037b406bb44de85c5dd50eb1a6472bedb79f447e747412695637c2784cbe43f';

function writeToDatabase(arr) {
    alert(arr);
    (async function() {
            // Send a post request, saving some data
            post_response = await fetch(endpoint, {
                    method: 'POST',
                    headers: {
                            'Content-Type': 'application/json'
                    },
                    body: JSON.stringify(arr)
            });
            /*
            // console.log the result
            console.log(`POST response:`, await post_response.json())
            */
    })();
}
function readFromDatabase() {
    fetch(endpoint)
    .then(response => response.json())
    .then(data => {

    console.log(data);
        dataArr = data;
        console.log(dataArr);
  });
}

yes.onclick = function() {
    fetch(endpoint)
    .then(response => response.json())
    .then(data => {

        data = JSON.stringify(data);
        console.log("full data: " + data);

        data = JSON.parse(data);
        data = data['result'];

        data = JSON.stringify(data);
        console.log("result array only: " + data);

        data = JSON.parse(data);// object.contructor.name
        console.log("after parse: " + data);
        console.log("data type is: " + data.constructor.name);

        data[userInput.value] = "YES";
        console.log("final string to write to database: " + data);
        writeToDatabase(data);
    });
}



no.onclick = function() {
    dataString = "{"+userInput.value+": "+"NO"+"}"
    writeToDatabase(dataString);
}
不清楚您在何处尝试了此操作,但如果您尝试解析{test:NO},则会出错,因为该字符串不是有效的JSON。{test:NO}将是有效的JSON,但缺少引号

不过,在JSON中嵌入JSON字符串是愚蠢的。最好将原始JSON表示为:

{
    "result": {
        "test": "NO"
    },
    "ok": true
}

您能否尝试创建一个您正在处理的工作示例,并至少分享一个您正在使用的response->JSON示例。谢谢。我以为它会给我一个目标?在哪里?要具体得多。整个问题太模糊了,我不确定,但我认为你们不需要解析任何东西,你们已经有了一个。。。因此,您可以直接使用JS对该数据对象进行操作!最终目标是更新数据库中的对象,所以我尝试读取旧数据,将其解析为对象,添加到对象中,然后解析为字符串并覆盖数据库中的旧数据。我根据您的答案修改了一些代码,效果更好,谢谢。但我遇到了一些问题,因为在得到以下错误之前,我最多只能添加2条数据:promise SyntaxError中的Uncaught:JSON中的意外标记o位于JSON.parse的位置1