<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Извлечение значения из JSON-массива]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=13455</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=13455&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Извлечение значения из JSON-массива».]]></description>
		<lastBuildDate>Mon, 12 Feb 2018 14:04:04 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Извлечение значения из JSON-массива]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=123697#p123697</link>
			<description><![CDATA[<p>При желании, можно даже использовать возможности <strong>HTML5</strong> предоставленные в <strong>Internet Explorer 11</strong>, в котором уже есть нативная поддержка <strong>JSON</strong> и расширенная версия объекта <strong>XMLHttpRequest</strong>. Но для этого, конечно же, нужно, чтобы он (IE11) был установлен в системе.</p><div class="codebox"><pre><code>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;job&gt;
	&lt;script language=&quot;VBScript&quot;&gt;
	&lt;![CDATA[
	Option Explicit
	Dim fileName, document, window
	&#039;Небольшой хак для загрузки движка Internet Explorer в режиме совместимости IE=11 (с поддержкой HTML5)
	&#039;Получение ссылки на документ
	Set document = WScript.GetObject(&quot;res://ieframe.dll/23/EN-US-PAGE2.HTML&quot;)
	&#039;Получение ссылки на окно
	Set window = document.parentWindow
	&#039;Ожидание полной загрузки
	While document.readyState &lt;&gt; &quot;complete&quot;
		WScript.Sleep 100
	Wend

	Dim JSON, i, elements, textStream
	&#039;Получение ссылки на объект JSON
	Set JSON = window.JSON
	&#039;Создание объекта XMLHttpRequest
	With(window.XMLHttpRequest())
		&#039;Открытие запроса
		.open &quot;GET&quot;,&quot;https://api.crypto-bridge.org/api/v1/ticker&quot;,false
		&#039;Установка возвращаемых данных
		.responseType = &quot;JSON&quot;
		&#039;Выполнение запроса
		.send
		&#039;Разбор ответа
		Set elements = JSON.parse(.responseText)
		&#039;Открытие текстового файла для сохранения данных
		Set textStream = CreateObject(&quot;Scripting.FileSystemObject&quot;).OpenTextFile(&quot;data.txt&quot;,2,True)
		&#039;Цикл перебора элементов
		For i = 0 to elements.length - 1
			textStream.WriteLine i &amp; &quot;: &quot; &amp; Eval(&quot;elements.[&quot; &amp; i &amp; &quot;].last&quot;)
		Next
	End With
	
	MsgBox &quot;Complete !&quot;, vbInformation
	
	]]&gt;
	&lt;/script&gt;
&lt;/job&gt;
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Mon, 12 Feb 2018 14:04:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=123697#p123697</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Извлечение значения из JSON-массива]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=123653#p123653</link>
			<description><![CDATA[<p>Пример с использованием <strong>JavaScript</strong>:<br /><strong>JSSample.wsf</strong><br /></p><div class="codebox"><pre><code>
&lt;?xml version=&quot;1.0&quot; ?&gt;
&lt;job id=&quot;JSON Request&quot;&gt;
	&lt;script language=&quot;JavaScript&quot; src=&quot;https://raw.githubusercontent.com/douglascrockford/JSON-js/master/json2.js&quot;&gt;&lt;/script&gt;
	&lt;script language=&quot;JavaScript&quot;&gt;
	&lt;![CDATA[
	with(new ActiveXObject(&#039;MSXML2.ServerXMLHTTP.6.0&#039;)){
		open(&#039;GET&#039;,&#039;https://api.crypto-bridge.org/api/v1/ticker&#039;,false);
		send();
		var array = JSON.parse(responseText);
		with(new ActiveXObject(&#039;Scripting.FileSystemObject&#039;).OpenTextFile(&#039;data.txt&#039;,2,true)){
			for(var i in array){
				WriteLine(i + &#039;: &#039; + array[i].last);
			}
		}
		WScript.Echo(&#039;Data parsed&#039;);
	}
	]]&gt;
	&lt;/script&gt;
&lt;/job&gt;
</code></pre></div><p>Пример с использованием <strong>VBScript</strong>:<br /><strong>VBSSample.wsf</strong><br /></p><div class="codebox"><pre><code>
&lt;?xml version=&quot;1.0&quot; ?&gt;
&lt;job id=&quot;JSON Request&quot;&gt;
	&lt;script language=&quot;JavaScript&quot; src=&quot;https://raw.githubusercontent.com/douglascrockford/JSON-js/master/json2.js&quot;&gt;&lt;/script&gt;
	&lt;script language=&quot;VBScript&quot;&gt;
	&lt;![CDATA[
	Option Explicit
	Dim data, i
	With CreateObject(&quot;MSXML2.ServerXMLHTTP.6.0&quot;)
		.Open &quot;GET&quot;, &quot;https://api.crypto-bridge.org/api/v1/ticker&quot;, False
		.Send
		Set data = JSON.parse(.responseText)
		With(CreateObject(&quot;Scripting.FileSystemObject&quot;).OpenTextFile(&quot;data.txt&quot;,2,true))
			For i = 0 to data.length - 1
				.WriteLine i &amp; &quot;: &quot; &amp; Eval(&quot;data.[&quot; &amp; i &amp; &quot;].last&quot;)
			Next
		End With
		WScript.Echo &quot;Data parsed&quot;
	End With
	]]&gt;
	&lt;/script&gt;
&lt;/job&gt;
</code></pre></div><p>Такой вариант Вам подходит ?</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Fri, 09 Feb 2018 17:23:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=123653#p123653</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Извлечение значения из JSON-массива]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=123652#p123652</link>
			<description><![CDATA[<p><strong>Xameleon</strong>,<br /></p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Исправьте, пожалуйста, заголовок темы в соответствии с правилами.</p></blockquote></div><p>Исправил, извиняюсь.<br /></p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Если Вы собрались работать с JSON данными, то проще это делать в языке JavaScript, а не VBScript.</p></blockquote></div><p>Дело в том, что полученные данные мне нужно далее обрабатывать определенным образом. И вся эта обработка уже реализована и написана на VBS. Собственно, именно поэтому я и попытался воспользоваться готовой ActiveX-компонентой, которая без труда перебирает JSON-массив, но вот как ей подпихнуть мою страницу - не знаю...</p>]]></description>
			<author><![CDATA[null@example.com (The_Immortal)]]></author>
			<pubDate>Fri, 09 Feb 2018 17:11:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=123652#p123652</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Извлечение значения из JSON-массива]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=123649#p123649</link>
			<description><![CDATA[<p><strong>The_Immortal</strong>, <br />1) Исправьте, пожалуйста, заголовок темы в соответствии с <a href="http://forum.script-coding.com/misc.php?action=rules">правилами</a>. Тогда сможем дальше вести дискуссию на тему решения задачи.<br />2) Насколько я понимаю, для Вашего случая, сторонние ActiveX компоненты не требуются. Достаточно средств WSH.<br />3) Если Вы собрались работать с JSON данными, то проще это делать в языке JavaScript, а не VBScript.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Fri, 09 Feb 2018 16:50:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=123649#p123649</guid>
		</item>
		<item>
			<title><![CDATA[VBS: Извлечение значения из JSON-массива]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=123648#p123648</link>
			<description><![CDATA[<p>Приветствую!</p><p>Господа, пытаюсь извлечь нужную информацию вот из этой <a href="https://api.crypto-bridge.org/api/v1/ticker">JSON-страницы</a>.</p><p>Нашел готовый <a href="https://www.example-code.com/vbscript/json_array_load_and_parse.asp">пример</a>, как это делается с помощью сторонней библиотеки (Chilkat ActiveX) и попытался адаптировать его для себя:<br /></p><div class="codebox"><pre><code>Dim fso, outFile
Set fso = CreateObject(&quot;Scripting.FileSystemObject&quot;)
Set outFile = fso.CreateTextFile(&quot;output.txt&quot;, True)

&#039;  A JSON array must be loaded using JsonArray:
set jsonArray = CreateObject(&quot;Chilkat_9_5_0.JsonArray&quot;)

success = jsonArray.Load(&quot;https://api.crypto-bridge.org/api/v1/ticker&quot;)

If (success &lt;&gt; 1) Then
    outFile.WriteLine(jsonArray.LastErrorText)  &#039;!!! &quot;Unable to get array at index 0.&quot;
    WScript.Quit
End If

&#039;  Examine the values:
i = 0
Do While i &lt; jsonArray.Size
    &#039; jsonObj is a Chilkat_9_5_0.JsonObject
    Set jsonObj = jsonArray.ObjectAt(i)
    outFile.WriteLine(i &amp; &quot;: &quot; &amp; jsonObj.StringOf(&quot;last&quot;))

    i = i + 1
Loop

outFile.Close
</code></pre></div><br /><p>Однако в выходном файле (output.txt) я вижу оишбку:<br /></p><div class="codebox"><pre><code> ChilkatLog:
  Load:
    ChilkatVersion: 9.5.0.71
    Unable to get array at index 0.
  --Load
--ChilkatLog</code></pre></div><p>Полагаю проблема в том, что я неправильно загружаю указанную страницу. Честно говоря, она вообще какая-то странная: при попытке обратиться к ней через IE тот воспринимает её как файл <em>ticker.json</em>, а вот Mozilla показывает в виде JSON-строки... =/</p><p>Подскажите, пожалуйста, как с таким работать?</p><p>Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (The_Immortal)]]></author>
			<pubDate>Fri, 09 Feb 2018 16:10:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=123648#p123648</guid>
		</item>
	</channel>
</rss>
