【问题标题】:Access to argument in json payload from javascript从 javascript 访问 json 有效负载中的参数
【发布时间】:2018-07-04 13:14:02
【问题描述】:

我正在对 a plugin for freeboard 的现有 js 代码进行一些更改。问题是我不确定如何访问收到的 json 有效负载。

插件应该与之通信的 api 的实现已从 not-so-RESTfull 更改为类似 RESTfull。还有困难。

原始 jscript 插件包含此代码,我认为这部分是我在here 描述的问题的罪魁祸首。

    $.ajax({
            url       : url,
            dataType  : "JSON",
            type: "POST",
            data: '{"entities":[{"type": "'+currentSettings.type+'","isPattern": false, "id" :"'+currentSettings.id+'"}]}',
            beforeSend: function(xhr)
            {
                xhr.setRequestHeader("Content-Type", "application/json");
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader("Fiware-Service", currentSettings.service);
                xhr.setRequestHeader("Fiware-ServicePath", currentSettings.servicepath);
                xhr.setRequestHeader("X-Auth-Token", currentSettings.xauthtoken);
            },

网址类型为:

     127.0.0.1:1026/v1/queryContext

整个 js 部分应该模仿来自 Orion Context Broker API v1 示例的查询,如下所示。

Link to query operation in Orion Context Broker API v1

正如您所看到的,它并不是真正的 RESTfull,它已被更改,但是插件已在 3 年前更新,并且不适用于新方法。

在新版本的 API 实现中,我可以简单地查询资源

    curl localhost:1026/v2/entities/Room1?type=Room -s -S -H 'Accept: application/json' | python -mjson.tool

Documentation of recent v2 of API implementation.

我更改了插件代码的那部分,主要是 URL 的定义,我想(但无法真正检查它 - 是否有任何 js 编译器或测试它的东西?我尝试了 Naked for python 并通过节点运行它,但没有办法调试它)它应该可以工作。

    $.ajax({
            url       : url,
            type: "GET",
            beforeSend: function(xhr)
            {                   
                xhr.setRequestHeader("Accept", "application/json");
                xhr.setRequestHeader("Fiware-Service", currentSettings.service);
                xhr.setRequestHeader("Fiware-ServicePath", currentSettings.servicepath);
                xhr.setRequestHeader("X-Auth-Token", currentSettings.xauthtoken);
            },

我有一个连接和使用我提供代码的 url 的服务,它通过 Insomnia 进行了测试。如果这段代码没有错误,他真正的问题在于原始代码的以下部分:

    //Get attributes 
    attributes=data["contextResponses"][0]["contextElement"]["attributes"];

它从接收到的有效负载中获取属性以进行进一步操作。在 v1 api 中接收到的有效载荷如下所示:

现在看起来像这样:

或者如果我像这样使用 keyValues 选项:

其中 id 用于请求的 url 和 type 也可以,这是已知的,所以它们无关紧要。 最重要的是id和type后面的那些属性。

如何提取它们?

原代码的succes部分,包含提到的getAttributes方法:

这个问题的第一段提到了该插件的代码。

success   : function(data)
            {        
     //Initialize mydata 
                mydata={};

                //if advanced setting is true do not modify received JSON 
                if(currentSettings.advanced){
                    mydata=data;
                }

                //if advanced setting is false reduce received JSON nesting
                else{

                    //Get attributes 
                    attributes=data["contextResponses"][0]["contextElement"]["attributes"];

                    //Get each attribute and append it to mydata
                    //////////////////////////////////////////////
                    Then there is manipulation on received data that is 
                    similar in both cases

【问题讨论】:

  • 您能在$.ajax 调用中向我们展示您的success 函数吗?因为听起来你在问如何读取 JavaScript 对象的字段。这与您 99% 的问题内容完全无关。本质上是success: function(response) { alert(response.capacityUsed); }
  • 除了 Chris 评论中的成功之外,您的数据字段也应该是 JSON 对象。
  • 我编辑了问题,并链接了javascipt插件的原始代码。
  • @SzymonCaban 就像我想的那样,您的大部分问题完全无关紧要。在您的 success 函数中,data 包含您发布为带有绿色键的图像的内容。使用例如data["location"]data.location 来访问各种值。没有什么比这更进一步了。见developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…示例代码:jsfiddle.net/khrismuc/nf41Lvty

标签: javascript json fiware-orion freeboard


【解决方案1】:

我不知道我是否正确理解了您的问题,但我认为这是您正在寻找的 wat

const objectCreatedFromResponse = JSON.parse(response);

如果你想访问一个属性,比如说id,你可以这样做

const id = objectCreatedFromResponse.id;

【讨论】:

  • jQuery 自动解析正确发送的 JSON。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多