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