【问题标题】:Assign parts of json (currently as a string) to variables in JavaScript将部分 json(当前作为字符串)分配给 JavaScript 中的变量
【发布时间】:2018-05-31 19:54:24
【问题描述】:

我已经被这个问题困扰了很长一段时间,真的找不到解决方案......

作为背景知识 - 我正在使用一个名为“eel”的库将 Python 脚本与 Web GUI 连接起来。

Python 脚本使用 json.dump 生成一个 .txt 文件,如下所示:

{
    "TEST": {"name": "TESTING", "email": "1", "telephone": "2"},
    "Nik": {"name": "test", "email": "1", "telephone": "2"}
}

我正在尝试在python中读取json文件,将数据分配给一个变量:

with open('profile1.txt') as f:
  data = json.load(f)
  eel.my_javascript_function(data)

然后在 JavaScript 端接收:

eel.expose(my_javascript_function);
function my_javascript_function(a) {
  var obj = JSON.stringify(a);
  document.getElementById("demo").innerHTML = obj;

现在,obj 返回整个字符串,如下所示:

{
    "TEST": {"name": "TESTING", "email": "1", "telephone": "2"},
    "Nik": {"name": "test", "email": "1", "telephone": "2"}
}

我遇到的问题是 - 如何将特定信息位分配给该字符串中的变量?

例如,如果我想做一个var a = TEST 或 Nik,是否可以调用更高级别的 json 类别?

此外,我如何在特定类别中调用某些内容,即 json[TEST][name] - 沿着这些思路?

【问题讨论】:

    标签: javascript html json python-3.x


    【解决方案1】:

    JSON 在 1 处有一个意外的字符 o

    这背后的原因是你试图parse JSON 对象。

    var obj = {
        "TEST": {"name": "TESTING", "email": "1", "telephone": "2"},
        "Nik": {"name": "test", "email": "1", "telephone": "2"}
    }
    
    console.log(JSON.parse(obj));

    因此,OP 中的obj 返回JSON object 而不是JSON string。无需再次解析。

    工作演示

    var obj = {
        "TEST": {"name": "TESTING", "email": "1", "telephone": "2"},
        "Nik": {"name": "test", "email": "1", "telephone": "2"}
    }
    
    var test = obj.TEST;
    var nik = obj.Nik;
    console.log("test", test);
    console.log("nik", nik);

    【讨论】:

    • 非常感谢您的回复,这确实有道理,但是,我目前的主要目的是在 HTML 中创建一个下拉列表,其中仅包含父值,即“TEST”和“ Nik' 所以我试图做的是找到一种方法来调用obj 的一部分,这样我就只能得到 json 的最高级别部分,如果这有意义的话?在这种情况下可能吗?
    • 您的回复让我重新思考了这一切,非常感谢。我已将 python 端改为将 json 读取为字符串:with open('profile1.txt') as f: data = f.readlines() 然后从 JS 端将其解析为 json,所以现在它工作正常。谢谢!!
    【解决方案2】:

    我想你想研究一下 JavaScript 端的 JSON.parse() 方法...

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

    它可以让您传递嵌套的 JSON 结构,就像 json.dump 在您的示例中提供的那样,然后使用标准 JavaScript 对象操作在其中导航以获取嵌套值或结构。

    var foo = '{"TEST": {"name": "TESTING", "email": "1", "telephone": "2"},"Nik": {"name": "test", "email": "1", "telephone": "2"}}';
    
    var fooObject = JSON.parse( foo );
    
    console.log( fooObject );
    console.log( fooObject["Nik"] );
    console.log( fooObject["Nik"]["email"] );
    
    document.getElementById("myDiv").innerHTML = fooObject["TEST"]["name"];
    <div id=myDiv></div>

    【讨论】:

    • 感谢您的回复,但是我之前尝试过解析它并没有成功..说json在1处有一个意外的字符o。
    • 我刚刚再次解析它,当我将对象分配给 html 标记以查看结果时,我得到了 [object Object]。我知道我需要把它变成一个字符串来解码它,但是我如何将它的一部分分配给变量呢?
    • 我在上面的答案中添加了一个代码 sn-p,以显示正在解析的示例 JSON 字符串以及如何访问子结构,方法是将它们记录到控制台以及将值设置为DOM 对象...希望这会有所帮助!
    猜你喜欢
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 2016-03-07
    • 2019-02-08
    • 2021-05-12
    • 2013-04-18
    相关资源
    最近更新 更多