从javascript

时间:2018-07-04 13:14:02

标签: javascript json fiware-orion freeboard

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

插件应该与之通信的api的实现已从非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的示例中获取的查询,如下所示。

The query that its supposed to imitate

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并通过node运行它,但无法对其进行调试)。它应该可以工作。

    $.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"];

它从接收到的有效载荷中获取属性,以进行进一步处理。在第1版api中,收到的有效负载如下所示:

现在看起来像这样:

enter image description here

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

enter image description here

在请求的url中使用id的地方,类型也可以,这是已知的,因此它们无关紧要。 最重要的是ID和类型后面的那些属性。

我如何提取它们?

原始代码的成功部分,包含提到的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

1 个答案:

答案 0 :(得分:0)

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

const objectCreatedFromResponse = JSON.parse(response);

如果您随后要访问属性,可以说一个ID,例如您可以执行的操作

const id = objectCreatedFromResponse.id;