Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
  • 한국 커뮤니티
0

Photoshop Script that reads a JSON file

Engaged ,
Dec 02, 2021 Dec 02, 2021

Hello everyone,

I'm trying to read a JSON file using a photoshop script.

 

I will select the JSON file via File Dialog:

var selectedFile = app.openDialog();

 

I want to loop through all JSON's objects and alert the values. (this is just a test)

for that here is an example of a JSON I made:

[
{"SKU":"AAA","TITLE":"Banana"},
{"SKU":"BBB","TITLE":"Peach"}
]

 

To sum up:

The photoshop script will pop a dialog asking the user to select a JSON file, and then it will show 4 alerts: AAA, Banana, BBB, Peach

 

 

Any help will be much appreciated!

TOPICS
Actions and scripting , Windows
3.0K
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe
Guide ,
Dec 02, 2021 Dec 02, 2021

 

var f = File.openDialog('Select file', '*.json', false)
if (f) {
  var s = '('
  f.open('r')
  while (!f.eof) { s += f.readln() }
  f.close()
  var o = eval(s + ')')
  for (var i = 0; i < o.length; i++) { for (var a in o[i]) { alert(o[i][a]) } }
}

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Dec 06, 2021 Dec 06, 2021

Thank you!

it worked.

if I had a CSV instead of a JSON file, what would you suggest me to do then?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 02, 2021 Dec 02, 2021
json = """[
{"SKU":"AAA","TITLE":"Banana"},
{"SKU":"BBB","TITLE":"Peach"}
]"""

arr = json.match(/\w+(?="(,|}))/g)
while(arr.length) alert(arr.shift())
Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Dec 06, 2021 Dec 06, 2021

thank you Kukurykus, I like this solution of making an array out of the JSON.

I have 2 questions

 

1. how can I know when an object ends? for example to alert "object 1 SKU: AAA"

2. if I had a CSV instead of a JSON file, what would you suggest me to do then?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 06, 2021 Dec 06, 2021

1) check its length:

 

({a: 1, b: 2, c: 3, d: 4}).__count__

 

2) use following code:

 

with(File('~/desktop/TEST.csv'))
	open('r'), cntnt = read(), close()
arr = cntnt.slice(10).split(/,|\n/g)
while(arr.length) alert(arr.shift())

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Dec 07, 2021 Dec 07, 2021

Check out this CSV, it doesn't work my friend.

I think the "slice(10)" is not a general solution, I wanted to ask you about a general solution that if I want to have different number of rows/columns it will stil work.

 

I'm basically need to know when a row ends (meaning each row is a product)

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 07, 2021 Dec 07, 2021

Change:

slice(10)

 

to:

split(/^.*\n/)[1]

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Dec 07, 2021 Dec 07, 2021

works now 🙂

I still need to know when a row ends because I need to make different code for each row, so my question is how for example will I alert:

"This is row 2" (and then after it "AAA", "Apple", "5")

 

I'm still figuring out what these do

split(/,|\n/g)
split(/^.*\n/)[1]

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 08, 2021 Dec 08, 2021

Change last 2 lines to:

 

alert('This is: ' + cntnt.split(/\n/g)[1])

\n is end of line, | is or, ^ is beginning, .* is everything in line, g is in entire file

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Dec 13, 2021 Dec 13, 2021

Thank you for the clear explaination 🙂

I got the CSV to work, if I wanted to make an array of the titles called CSV_Titles (which will be an array of 2 cells "TITLE,SKU")

 

what will I need to write inside the split please?

 

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 13, 2021 Dec 13, 2021

I can't imagine this .csv without seeing it to understand what you exactly mean this time.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Dec 13, 2021 Dec 13, 2021

I managed to make it work for now anyway 🙂

Thanks for the professionalism and kindness.

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Dec 13, 2021 Dec 13, 2021
LATEST

Could you explain though what you needed?

Translate
Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines