Hi Sven (et al),

On 10 December 2017 at 11:45, Ben Coman <b...@openinworld.com> wrote:

>
> 3. Finally parse into real objects the nested level holding the data you
> really want...
>
> Object subclass: #Market
> instanceVariableNames: 'MarketCurrency BaseCurrency MarketCurrencyLong
> BaseCurrencyLong MinTradeSize MarketName IsActive Created Notice
> IsSponsored LogoUrl'
> classVariableNames: ''
> package: 'Bittrex'
>
> (ZnClient new
> url: 'https://bittrex.com/api/v1.1/public/getmarkets';
> enforceHttpSuccess: true;
> accept: ZnMimeType applicationJson;
> contentReader: [ :entity | |reader|
> reader := (NeoJSONReader on: entity readStream).
> reader for: BittrexResponse do: [:m|
> m mapInstVar: #success.
> m mapInstVar: #message.
> (m mapInstVar: #result) valueSchema: #ArrayOfMarkets].
> reader for: #ArrayOfMarkets customDo: [ :mapping | mapping
> listOfElementSchema: Market ].
> reader mapInstVarsFor: Market.
>       reader nextAs: BittrexResponse ];
>    get) inspect.
>
> ==>BittrexResponse
>       success => true
>       message => ''
>       result => an Array(a Market(LTC) a Market(DOGE) a Market(VTC) a
> Market(PPC) a Market(FTC) a Market(RDD)
> ... Market(POWR) a Market(BTG) a Market(BTG) a Market(BTG) a Market(ADA) a
> Market(ENG) a Market(ENG))
>

So the code of [3.] above works fine when the raw response looks like
this...
(ZnClient new
url: 'https://bittrex.com/api/v1.1/public/getmarkets';
get) inspect.
==> {"success":true,
          "message":"",
          "result": [{"MarketName":"BTC-LTC},{"MarketName":"BTC-NXT}]
        }

But of course [3.] doesn't work when the raw response looks like this...
(ZnClient new
url: 'https://bittrex.com/api/v1.1/public/getticker?market=BTC-LTC';
get) inspect.
==> {"success":true,
           "message":"",
           "result":{"Bid":0.01765465,"Ask":0.01769000,"Last":0.01763350}
       }

since result is a json-object not a json-array.  But I can't work out
how to map the JSON object into the 'result' instance variable of
BittrexResponse,
where...

BittrexObject subclass: #BittrexTicker
instanceVariableNames: 'Bid Ask Last'
classVariableNames: ''
package: 'Bittrex'


My best guesses so far are uncommenting either [A.] or [B.] below...

(ZnClient new
url: 'https://bittrex.com/api/v1.1/public/getticker?market=BTC-LTC';
enforceHttpSuccess: true;
accept: ZnMimeType applicationJson;
contentReader: [ :entity | |reader|
reader := (NeoJSONReader on: entity readStream).
reader for: BittrexResponse do: [:m|
m mapInstVar: #success.
m mapInstVar: #message.
(m mapInstVar: #result) valueSchema: #BittrexTicker].
"A. reader for: BittrexTicker do: [ :m|
m mapInstVar: #Bid]."
"B. reader for: #BittrexTicker customDo: [ :mapping |
mapping mapWithValueSchema: BittrexTicker]."
      reader nextAs: BittrexResponse ];
   get).


Can you advise what formulation is required?
cheers -ben

Reply via email to