Announcement

Collapse
No announcement yet.

How do you return a list of MarketIds as a string with each record in double quotes

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

    How do you return a list of MarketIds as a string with each record in double quotes

    I am trying to convert my Javascript program to Python.

    If I hard code the marketIds into an API request they work fine ie

    requestFilters = {"filter":{"marketIds":["1.128390571","1.131715486"]}, "sort":"FIRST_TO_START", "marketProjection":["MARKET_START_TIME","RUNNER_DESCRIPTION"], "maxResults":"3"}

    and returns the following if you print request filters.

    requestFilters = {"filter":{"marketIds":["1.128390571","1.131715486"]}, "sort":"FIRST_TO_START", "marketProjection":["MARKET_START_TIME","RUNNER_DESCRIPTION"], "maxResults":"3"}

    problem is I want to get the MarketIds for the next 10 markets and then get data on them. I need to be able to collect them in a list which I pass to request filters as a string. Market Ids are strings and sometimes have trailling zeros so they must be stored as strings.

    If I create an array with the same markets and pass it to requestFilters as a string it fails because it converts double quotes to single quotes,
    single quotes remain single quotes,
    single + double quotes convert to single + double and not double as I had hoped.
    Only double quotes work in requestFilters so I have to get my list to leave each item surrounded by double quotes

    Eg

    Markets = ["1.128390571","1.131715486"]

    MarketsString = str(Markets)
    print ("\nMarketsString = ", MarketsString)
    requestFilters = '{"filter":{"marketIds":'+str(Markets)+'}, "sort":"FIRST_TO_START", "marketProjection":["MARKET_START_TIME","RUNNER_DESCRIPTION"], "maxResults":"3"}'
    print ("\n requestFilters = ",requestFilters)

    returns

    MarketsString = ['1.128390571', '1.131715486']

    requestFilters = {"filter":{"marketIds":['1.128390571', '1.131715486']}, "sort":"FIRST_TO_START", "marketProjection":["MARKET_START_TIME","RUNNER_DESCRIPTION"], "maxResults":"3"}

    which doesn’t work

    I have spent hours on this and can find no solutions

    #2
    Are you sure this isn't just a facet of the print function?

    If not, you can probably:

    1. Just replace all single quotes with double quotes using the replace function

    or

    2. Use json.dumps to produce a json string.

    See https://stackoverflow.com/questions/...-quoted-string

    Comment


      #3
      You are trying to build a string rather than a python dictionary which you can then convert to json using json.dumps().

      For example

      Code:
      import json
      
      markets = ['1.12424345', '1.1243545']
      filter = {'filter': markets}
      
      request = json.dumps(filter)
      Or just use my library and save yourself a few days of pain

      http://www.betangel.com/forum/viewtopic.php?f=2&t=14635

      Comment


        #4
        Thanks everyone. You are really quick. No doubt after you had posted your replies I found a solution. Which I set out below. This is essentially betDynamics first solution but it took me a little while to get it to work for the reason given at the end. I will look at json.dumps to understand that and also Liamps library.

        Thank you both for the speed and helpful pointers

        Markets = ["1.128390571","1.131715486"]

        MarketsString = str(Markets)
        MarketsString = MarketsString.replace("'",'"') # that is (double single double,single double single)
        print ("\nMarketsString = ", MarketsString)
        requestFilters = '{"filter":{"marketIds":'+MarketsString+'}, "sort":"FIRST_TO_START", "marketProjection":["MARKET_START_TIME","RUNNER_DESCRIPTION"], "maxResults":"3"}'
        print ("\n requestFilters = ",requestFilters)

        Now outputs as

        MarketsString = ["1.128390571", "1.131715486"]

        requestFilters = {"filter":{"marketIds":["1.128390571", "1.131715486"]}, "sort":"FIRST_TO_START", "marketProjection":["MARKET_START_TIME","RUNNER_DESCRIPTION"], "maxResults":"3"}

        which works at least until I try reading data from market catalogue and adding to Markets

        A word of warning. Using either ‘’’ or “”” in string.replace creates a multiline comment starter which remarks out the rest of the program

        Comment

        Working...
        X