> On 26 Apr 2017, at 17:21, Peter Uhnak <[email protected]> wrote:
>
> Maybe the content is not properly stored in the JSON on github' side? But you
> can use base64 in `accept:` to make it work.
>
> json := STONJSON fromString: (ZnClient new
> url: 'https://api.github.com/gists/5503544';
> accept: 'application/vnd.github.v3.base64+json';
> get).
> b64 := ((json at: 'files') at: 'thumbnail.png') at: 'content'.
> PNGReadWriter formFromStream: (Base64MimeConverter mimeDecodeToBytes: content
> readStream).
Ah, great that you found a way to force the server to send the data in a more
sensible way !
Using the latest code from Zn & NeoJSON, combining with another recent thread
(accessing nested dictionaries), this could be written as:
json := NeoJSONObject fromString: (ZnClient new
url: 'https://api.github.com/gists/5503544';
accept: 'application/vnd.github.v3.base64+json';
get).
b64 := json atPath: #('files' 'thumbnail.png' 'content').
PNGReadWriter formFromStream: (ZnBase64Encoder new decode: b64) readStream.
Sven
> Peter
>
>
> On Wed, Apr 26, 2017 at 04:50:04PM +0200, Sven Van Caekenberghe wrote:
>> I am puzzled by how they actually encoded the PNG as a String, I tried a
>> couple of alternatives but I could not get binary data out of it so that it
>> parsed successfully as PNG.
>>
>> If I would have to encode binary data in JSON I would use Base64 encoding
>> (but alternatives exist).
>>
>>> On 24 Apr 2017, at 20:36, Juraj Kubelka <[email protected]> wrote:
>>>
>>> Hi,
>>>
>>> I was playing with GitHub Gist API and I have queried the following Gist:
>>> https://gist.github.com/mbostock/5503544
>>> I was interested how the PNG image is returned:
>>> https://gist.github.com/mbostock/5503544#file-thumbnail-png
>>>
>>> I can obtain the whole Gist executing:
>>>
>>> STONJSON fromString:
>>> (ZnClient new
>>> url: 'https://api.github.com/gists/5503544';
>>> accept: 'application/vnd.github.v3+json';
>>> get).
>>>
>>> I can get PNG contents executing:
>>>
>>> pngData := (ZnEasy get:
>>> ((((STONJSON fromString:
>>> (ZnClient new
>>> url: 'https://api.github.com/gists/5503544';
>>> accept: 'application/vnd.github.v3+json';
>>> get)) at: 'files') at: 'thumbnail.png') at: 'raw_url'))
>>> contents.
>>> PNGReadWriter formFromStream: rawPng readStream.
>>>
>>> But the PNG image is part of the Gist query and can be retrieved by:
>>>
>>> pngContent := ((((STONJSON fromString:
>>> (ZnClient new
>>> url: 'https://api.github.com/gists/5503544';
>>> accept: 'application/vnd.github.v3+json';
>>> get)) at: 'files') at: 'thumbnail.png') at: 'content').
>>>
>>> "As pngContent is a WideString, I cannot use:"
>>> PNGReadWriter formFromStream: pngContent readStream.
>>>
>>> How can I read the PNG image from the pngContent? Any idea?
>>> And the reverse question: How can I send the PNG bytes using JSON format?
>>>
>>> Thanks!
>>> Juraj
>>>
>>
>>
>