2017-08-18 9 views
-2

APIによって提供されるオブジェクトにアクセスしようとしているときに混乱しています。使用さRESTful APIからオブジェクトのこのプロパティにアクセスするにはどうすればよいですか?

API:CloudFlareのV4のAPIが使用されている

コンセプトで提供されています:

私は同じオブジェクトを受け取りますAPIにアクセスする際にmyObjectを使用しますが、私がオブジェクトを理解できるようにするために、私はソースコードを含んでいます下にアクセスしてください。

かなり整形を持つオブジェクト

{ 
    "result": [{ 
    "id": "e9a821b6379bd22539226a4cc6956144", 
    "mode": "challenge", 
    "allowed_modes": ["block", "challenge", "whitelist", "js_challenge"], 
    "status": "active", 
    "notes": "BY API", 
    "scope": { 
     "id": "981969ce21909a61b62905c585ec9aaa", 
     "email": "[email protected]", 
     "type": "user" 
    }, 
    "configuration": { 
     "value": "AD", 
     "target": "country" 
    }, 
    "created_on": "2017-08-06T17:05:19.126546Z", 
    "modified_on": "2017-08-06T17:05:19.126546Z" 
    }], 
    "result_info": { 
    "page": 1, 
    "per_page": 1, 
    "total_pages": 251, 
    "count": 1, 
    "total_count": 251 
    }, 
    "success": true, 
    "errors": [], 
    "messages": [] 
} 

以下のコードは、予想されるものです問題のない数251を返します。実際の使用では

var myObject = {"result":[{"id":"e9a821b6379bd22539226a4cc6956144","mode":"challenge","allowed_modes":["block","challenge","whitelist","js_challenge"],"status":"active","notes":"BY API","scope":{"id":"981969ce21909a61b62905c585ec9aaa","email":"[email protected]","type":"user"},"configuration":{"value":"AD","target":"country"},"created_on":"2017-08-06T17:05:19.126546Z","modified_on":"2017-08-06T17:05:19.126546Z"}],"result_info":{"page":1,"per_page":1,"total_pages":251,"count":1,"total_count":251},"success":true,"errors":[],"messages":[]} 

console.log(myObject["result_info"]["total_pages"]) 

:このスクリプトは、ノードで実行されていましたさ

は、configureモジュールは、APIキーとスタッフを(彼らがうまくいけば明白な理由のために露出してはならない)が含まれています。

コンセプトコードconsole.log(body["result_info"]["total_pages"]);とは異なり、エラーはエラーを返します。

/Documents/Coding/cloudflare-scripts/remove-user-level-firewall-rules.js:44 
console.log(body["result_info"]["total_pages"]); 

^ 

TypeError: Cannot read property 'total_pages' of undefined 
at Request._callback (/Users/nathanielsuchy/Documents/Coding/cloudflare-scripts/remove-user-level-firewall-rules.js:44:36) 
at Request.self.callback (/Users/nathanielsuchy/node_modules/request/request.js:188:22) 
at emitTwo (events.js:125:13) 
at Request.emit (events.js:213:7) 
at Request.<anonymous> (/Users/nathanielsuchy/node_modules/request/request.js:1171:10) 
at emitOne (events.js:115:13) 
at Request.emit (events.js:210:7) 
at IncomingMessage.<anonymous> (/Users/nathanielsuchy/node_modules/request/request.js:1091:12) 
at Object.onceWrapper (events.js:314:30) 
at emitNone (events.js:110:20) 

APIのオブジェクト出力から直接ページ数にアクセスできるようにこのスクリプトを修正するにはどうすればよいですか?

+0

'body'だけを記録すると、正当なJSONデータがAPIサーバーから返されたことがわかりますか?それとも、それはあなたが探している価値がない、偽の/欠けていますか? – Treebasher

+0

@Treebasher私はちょうどボディを記録する場合、私は期待されるオブジェクトを取得します。しかし、total_pagesプロパティにアクセスしようとすると、エラーメッセージが表示されます。これは、コンセプトコードがほぼ同じオブジェクト、同じフォーマットであるという私の証明がエラーを出さず、期待値を返すので意味をなさない。 –

+0

JSON.parse(body) 'を使う必要があるかもしれないと思います。 JSONとして表されるJavaScriptオブジェクトではなく、HTTPリクエストから返された文字列を取得しています。したがって、おそらく1つに解析する必要があります。 – Treebasher

答えて

-1

JSONオブジェクトは、アクセスする前に解析する必要があります。さらに問題を掘り下げると、他の回答と私は解決策を見つけることができたのコメントに感謝した後

myObject = JSON.parse(body); console.log(myObject["child"]["nested child"]);

+0

残念ながら問題は解決しませんでした。 1)エラーメッセージが表示されます。 2)コンセプトコードでJSONを解析しなかったため、問題なく動作しました。 –

+1

console.log(body)の出力は何ですか? –

+0

出力: '{" result ":" {"id": "e9a821b6379bd22539226a4cc6956144" "モード": "チャレンジ"、 "allowed_modes": "ブロック"、 "ホワイトリスト"、 "js_challenge" ]、[ステータス]:[アクティブ]、[メモ]:[BY API]、[スコープ]:{"id": "9 81969ce21909a61b62905c585ec9aaa"、 "email": "[email protected]" "country"} "created_on": "2017-08-06T17:05:19.126546Z"、 "modified_ ": "ユーザー"} " "1ページ、" per_page ":1、" total_pages ":251、" count ":1、" total_count ":251}"、 "result_info":2017-08-06T17:05:19.126546Z "}] 、 "成功":true、 "errors":[]、 "messages":[]} ' –

0

JSON解析のサンプルコードが少しオフになっていても、エラーが発生しましたが、JSON解析の詳細な調査を行ったところ、解決策が見つかりました。

console.log(JSON.parse(body)["result_info"]["total_pages"]);

主なものは、JSONの解析関数の外にする必要プロパティブラケット表記でした。

ここでヘルプを提供してくれた皆さん、ありがとうございました。

関連する問題