BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
HB
Barite | Level 11 HB
Barite | Level 11

Hey,

 

I need to generate JSON that looks like 

 

...

"key1": "value1",
"key2": ["arrayvalue1", "arrayvalue2", "arrayvalue3"],

...

 

The above format works and displays when I feed it to a Web page.

 

I am trying to use 

 

proc json out = "mylocation\filename.json" pretty nosastags;
export myoutputtable;
run;

 

This runs/works (and could be a cool time saver), but delivers JSON looking like 

 

...

"key1": "value1",
"key2": "[\"arrayvalue1\", \"arrayvalue2\", \"arrayvalue3\"]",

...

 

So it quotes the whole array and escapes the quotes on the items inside.  Blows things up. 

 

Can anybody tell me how or even if I can tweak Proc JSON to adjust the output?

 

If I can't, I sort of get this solution from Tom

https://communities.sas.com/t5/SAS-Procedures/Proc-JSON-Export-Nested-JSON/m-p/813357

but don't readily see how to adapt that writing a value array with variable item counts.  

 

Thanks in advance. 

 

1 ACCEPTED SOLUTION

Accepted Solutions
Tom
Super User Tom
Super User

Instead of using code like this 

  /' ,"URL":{"path":' url :$quote. '}'

to create a JSON object you could use code like this:

/' ,"key2": [' stringvar ']'

to create a JSON array.  Where KEY2 is the name for the array and STRINGVAR is the single variable with a value like:

"arrayvalue1", "arrayvalue2", "arrayvalue3"

Or use a DO loop to write multiple individual values.  Either by looping over an array (SAS data step array) of the values, only writing the non-missing values.  Or using BY group processing to write values from multiple observations of the same variable.

 

PS Again, write the continuation characters at beginning of the lines where they are easier for humans to scan.

View solution in original post

3 REPLIES 3
Tom
Super User Tom
Super User

Instead of using code like this 

  /' ,"URL":{"path":' url :$quote. '}'

to create a JSON object you could use code like this:

/' ,"key2": [' stringvar ']'

to create a JSON array.  Where KEY2 is the name for the array and STRINGVAR is the single variable with a value like:

"arrayvalue1", "arrayvalue2", "arrayvalue3"

Or use a DO loop to write multiple individual values.  Either by looping over an array (SAS data step array) of the values, only writing the non-missing values.  Or using BY group processing to write values from multiple observations of the same variable.

 

PS Again, write the continuation characters at beginning of the lines where they are easier for humans to scan.

HB
Barite | Level 11 HB
Barite | Level 11

Tom,

 

Your repost of the $quote. thing was what did it.  

 

I manipulated my programtype array data to look like this as a string:

["11", "10", "9", "16", "14", "1"]

 

then I wrote it out as 

"programname":' programname :$quote. /',
"programtype":' programtype /',

 

without the outside quoting.

 

That gives me the output I want

, "programname":"name"
, "programtype":["1", "16"] 

 

except that (unlike you, and I know this will probably tick you off - LOL) I HATE with a passion the commas at the beginning of the line  and would really prefer

"programname":"name",
"programtype":["1", "16"],

 

I know the arguments, I just like them at the end. I don't know how to move them so i guess I am stuck until I figure that out. 

 

Thanks for tweaking my brain. 

 

 

 

 

 

HB
Barite | Level 11 HB
Barite | Level 11

Yep.  

 

This

{

item

,item

,item

}

 

doesn't work. Never loads. 

 

I think I do need

{

item,

item,

item

}

 

for the code to like and display it. 

 

I've tried every rearrangement of

 "key":' dataset_value :$quote. /',

 

I can think of with no joy. 

 

"key":' dataset_value :$quote.  ,/'
 "key":' dataset_value :$quote. ' ,/

"key":' dataset_value :$quote. ' , /n

 

How do I do it?  Looking at you Tom. 

 

SAS INNOVATE 2024

Innovate_SAS_Blue.png

Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.

If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website. 

Register now!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

Get the $99 certification deal.jpg

 

 

Back in the Classroom!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 3 replies
  • 256 views
  • 0 likes
  • 2 in conversation