【问题标题】:Using string in referencing JSON object in request在请求中引用 JSON 对象时使用字符串
【发布时间】:2016-08-07 00:03:36
【问题描述】:

使用 fetch 请求获取一些数据。 JSON 对象路径取决于字符串变量。我如何将字符串转换为可以在路径中作为数组引用的对象。这是我的代码:

var path = 'bob';

fetch(request)
    .then(function(response) {
        if (!response.ok) {
            throw Error(response.statusText);
        }
        return response.json();
    }).then(function(json) {

        var data = json.message.path[0].text;

    }).catch(function(error) {
        console.log(error);
    });

JSON:

{
"message": {
    "bob": [
      {
        "name_id": "3351",
        "name": "bob",
        "text": "lorem ipsum"
      },
      {
        "name_id": "34562",
        "name": "bob",
        "text": "lorem ipsum2"
      }
    ]
}

基本上,path 定义了要在点表示法中使用的正确对象。但是 - 对象还必须能够引用数组。

有什么解决办法吗?

【问题讨论】:

  • “对象必须能够引用数组”是什么意思? jsonpath的结构能具体举个例子吗?
  • JSON 是有组织的,路径是一个数组,我需要获取该数组中的第一项。但我只能通过字符串引用路径。查看示例代码。
  • 在你的例子中,path 不是一个数组,它是一个字符串...你的意思是你得到一个代表路径的字符串,然后你想将它转换成一个数组?
  • 为您的问题添加上下文/更多细节会有所帮助。
  • 是的,这就是您使用数组的方式。或var tmp = json.message[path]; ... tmp[0] - 结果相同。

标签: javascript arrays json string


【解决方案1】:

您可以尝试使用:

var data = json.message[path][0].text;

其中 path 是您定义的对象的名称:

path = "bob";

【讨论】:

    【解决方案2】:

    如果您有 path 格式的 user.index 变量,您可以像这样在 JSON 中引用相应的消息:

    path = path.split(".");
    var name = path[0], index = path[1];
    var data = json.message[name][index].text;
    

    如果path"bob.1",则data 将变为"lorem ipsum2"

    json.message[name] 计算为消息数组。要索引到该数组,只需在值后面加上括号,就像任何其他数组一样:json.message[name][index],相当于(json.message[name])[index],相当于var array = json.message[name],然后是array[index]

    请注意,此解决方案不进行错误检查,如果给定用户不在json.message 中,则会引发错误。

    【讨论】:

      猜你喜欢
      • 2018-12-24
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      相关资源
      最近更新 更多