Проблема форматирования JSON с API в javascript
var request = new XMLHttpRequest() request.open('GET', 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&apikey=demo', true) request.onload = function() { // Begin accessing JSON data here var data = JSON.parse(this.response) console.log(data) } request.send()
Я работал с API Alpha Vantage, чтобы получить биржевые данные, но то, как они форматируют свои данные, делает их почти невозможными для доступа. Я использую демонстрационные данные, потому что не хочу использовать свой собственный ключ API из-за ограничений, которые они накладывают.
Они помещают имена свойств объектов в строки, и обычно в строке содержится более одного слова. Это мешает мне получить доступ к собственности после того, как я использую
JSON.parse()
потому что использование JSON.parse()
приводит к тому, что имена свойств объекта не являются строками, а просто именами свойств, что отключает мой доступ к отдельному свойству, поскольку имена свойств объекта не могут быть более чем одним словом, если только имена не являются строками. Поэтому API не позволяет мне получить доступ к данным объекта. Я использую
JSON.parse()
потому что если бы я этого не сделал, то ответ, который я получаю от API, - это сама строка, которую я не могу использовать. Я пытаюсь найти альтернативу этому JSON.parse()
это преобразует строку со всеми данными объекта внутри нее в обычный объект, но обычный объект все еще сохраняет имена свойств, которые являются строками.Вот что я получаю обратно после того, как использую
JSON.parse()
:{ Meta Data: { 1. Information:"Daily Prices (open, high, low, close) and Volumes", 2. Symbol:"MSFT", 3. Last Refreshed:"2019-09-24", 4. Output Size:"Compact", 5. Time Zone:"US/Eastern" }, Time Series (Daily): { 2019-09-24: { 1. open:"140.3600", 2. high:"140.6900", 3. low:"136.8850", 4. close:"137.3800", 5. volume:"24602078" }, 2019-09-23: { 1. open:"139.2300", 2. high:"139.6300", 3. low:"138.4400", 4. close:"139.1400", 5. volume:"17139300" }, 2019-09-20: { 1. open:"141.0100", 2. high:"141.6500", 3. low:"138.2500", 4. close:"139.4400", 5. volume:"39167300" }, 2019-09-19: { 1. open:"140.3000", 2. high:"142.3700", 3. low:"140.0700", 4. close:"141.0700", 5. volume:"35772100" } } }
Если я не использую
JSON.parse()
, в результате получается вот что:'{ "Meta Data": { "1. Information": "Daily Prices (open, high, low, close) and Volumes", "2. Symbol": "MSFT", "3. Last Refreshed": "2019-09-24", "4. Output Size": "Compact", "5. Time Zone": "US/Eastern" }, "Time Series (Daily)": { "2019-09-24": { "1. open": "140.3600", "2. high": "140.6900", "3. low": "136.8850", "4. close": "137.3800", "5. volume": "24602078" }, "2019-09-23": { "1. open": "139.2300", "2. high": "139.6300", "3. low": "138.4400", "4. close": "139.1400", "5. volume": "17139300" }, "2019-09-20": { "1. open": "141.0100", "2. high": "141.6500", "3. low": "138.2500", "4. close": "139.4400", "5. volume": "39167300" }, "2019-09-19": { "1. open": "140.3000", "2. high": "142.3700", "3. low": "140.0700", "4. close": "141.0700", "5. volume": "35772100" } } }
Объект обернут в строку, что делает его невозможным для использования.
Что я уже пробовал:
Я пробовал использовать JSON.parse (), но это не сработало.
MadMyche
Можете ли вы предоставить образец данных, которые вы получаете обратно? Судя по вашему описанию то что они посылают обратно действительно
F-ES Sitecore
google "alphavantage javascript", и вы найдете клиентские библиотеки и примеры кода, которые анализируют данные.
[no name]
Я предоставил образец данных.