wg function's json parser is not working correctly

Problem with TWO different wget statements in KWGT:

A) $wg(gv(fullurl), json, .['Time Series (Daily)'].['2018-04-03'].[0])$

B) $wg(gv(fullurl), json, .['Meta Data'].[0])$


If I execute $wg(gv(fullurl), json, .['Meta Data'])$ (without the [0]) I get the following:

{1. Information=Daily Prices (open, high, low, close) and Volumes, 2. Symbol=MSFT, etc...

This data should be AN ARRAY of data, but appears to be a string instead

Statement B above COMPLETELY fails (no output). My best guess is that the parenthesis in the json key are causing the issue, but I am not entirely sure.

Am I missing something?

Actual results (truncated here) in a browser or via curl are:

    "Meta Data": {
        "1. Information": "Daily Prices (open, high, low, close) and Volumes",
        "2. Symbol": "MSFT",
    "Time Series (Daily)": {
        "2018-04-03": {
            "1. open": "89.5750",
            "2. high": "90.0400",

Use bracket notation or dot notation. Not both.

$wg(gv(fullurl), json, ['Time Series (Daily)']['2018-04-03'][0])$


$wg(gv(fullurl), json, ".Time Series (Daily).2018-04-03[0]")$

Bracket notation would most likely work better in this scenario due to the spaces in your JSON element names.

I have been cracking my head over this. The json has changed slightly since the original post was made but the challenge remains. The current JSON looks something like this.

    "Meta Data": {
        "1. Information": "Daily Prices (open, high, low, close) and Volumes",
        "2. Symbol": "MSFT",
        "3. Last Refreshed": "2018-08-10",
        "4. Output Size": "Compact",
        "5. Time Zone": "US/Eastern"
    "Time Series (Daily)": {
        "2018-08-10": {
            "1. open": "109.4200",
            "2. high": "109.6900",
            "3. low": "108.3800",
            "4. close": "109.0000",
            "5. volume": "18119408"
        "2018-08-09": {
            "1. open": "109.7100",
            "2. high": "110.1600",
            "3. low": "109.6000",
            "4. close": "109.6700",
            "5. volume": "13677211"
        "2018-08-08": {
            "1. open": "109.3300",
            "2. high": "109.7500",
            "3. low": "108.7599",
            "4. close": "109.4900",
            "5. volume": "15487502"

I need to get the value from "4. close" from the second node in "Time Series (Daily). On tuesday till saturday I can achieve this with .['Time Series (Daily)']['$df(yyyy-MM-DD, r1d)$']['4. close'] . This however wont work on sunday and monday because the stock markets are not open on the previous days of these two days.

So I somehow need a way to select the second node but I dont seem to be able to achieve this. Using stuff like .['Time Series (Daily)'][1]['4. close'] is not working. Strangely I can get the value from "4. close" of the first node using this: .['Time Series (Daily)'][*]['4. close'] .

Any solution to this?

replace your df() function with if(df(f)<3, df(yyyy-MM-dd, "r"+(df(f)+1)+"d"), df(yyyy-MM-dd, r1d))

Thanx Joshua, looks like the right direction. Trying to get my head around it. It's not working correctly yet. If I use it today (on a Sunday) it still gives me the date of yesterday (Saturday) while it s should give me the date of Friday.

I'm on the road right now but I'll see if I can tweak it further.

For reference, I fixed it with the following formula.

$if(df(f)=1, df(yyyy-MM-dd, r3d), df(f)=6, df(yyyy-MM-dd, r2d), df(f)=7, df(yyyy-MM-dd, r3d), df(f)>1&df(f)<6, df(yyyy-MM-dd), 1rd)$