PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → JSONToVariant
JSONToVariant
Débuté par PETER ZHOU, 09 avr. 2018 03:20 - 5 réponses
Posté le 09 avril 2018 - 03:20
Hi,

I received error from WINDEV saying 'Member' property not allowed on 'array' variable.
Error code: 1102; Level: fatal error

What i can do to fix it?

Json :-

[{"origin": false, "message_follower_ids": [3, 19], "create_date": "2018-04-06 09:01:36", "display_name": "SO003", "order_line": [6, 7], "invoiced_rate": 0.0, "write_uid": [1, "Administrator"], "currency_id": [1, "EUR"], "invoice_ids": [], "invoice_exists": false, "client_order_ref": false, "date_order": "2018-04-06 09:01:39", "partner_id": [19, "Chamber Works"], "message_ids": [274, 248, 247], "message_summary": " ", "amount_tax": 0.0, "procurement_group_id": false, "fiscal_position": false, "amount_untaxed": 377.5, "message_is_follower": true, "__last_update": "2018-04-06 11:04:13", "payment_term": false, "message_last_post": "2018-04-06 11:04:13", "company_id": [1, "YourCompany"], "id": 3, "note": false, "state": "manual", "paypal_url": false, "pricelist_id": [1, "Public Pricelist (EUR)"], "invoiced": false, "create_uid": [1, "Administrator"], "portal_payment_options": "", "section_id": [1, "Direct Sales"], "write_date": "2018-04-06 11:04:13", "partner_invoice_id": [19, "Chamber Works"], "user_id": [1, "Administrator"], "date_confirm": "2018-04-06", "amount_total": 377.5, "project_id": false, "name": "SO003", "partner_shipping_id": [19, "Chamber Works"], "product_id": [2, "On Site Monitoring"], "order_policy": "manual", "message_unread": false}]


sJSon is ANSI string = EDT_NoName1 ( which contain the Json )
let vjs=JSONToVariant(sJSon)


FOR EACH _Member OF vjs..Member

IF _Member..Member..Occurrence = 0 THEN
Trace("The member " + _Member..Name + " has the value " +
Member..Value)
ELSE
Trace("The member " + _Member..Name + " has " +
Member..Member..Occurrence + ...
" other members")
BrowseVariantMembers(_Member)
END
END


PROCEDURE BrowseVariantMembers(x)

FOR EACH _Member OF x..Member
IF _Member..Member..Occurrence = 0 THEN
Trace(RepeatString("--", StringCount(dbgInfo(dbgStack), CR)) + ...
"The member " + _Member..Name + " has the value " + _Member..Value)

ELSE
Trace(RepeatString("--", StringCount(dbgInfo(dbgStack), CR)) + ...
"The member " + _Member..Name + " has " + _Member..Member..Occurrence + ...
" other members...")

BrowseVariantMembers(_Member)
END
END


Regards,

PETER ZHOU
Posté le 09 avril 2018 - 15:59
Quote
PETER ZHOU

Hi,





I received error from WINDEV saying 'Member' property not allowed on 'array' variable.


Error code: 1102; Level: fatal error





What i can do to fix it?





Json :-





[{"origin": false, "message_follower_ids": [3, 19], "create_date": "2018-04-06 09:01:36", "display_name": "SO003", "order_line": [6, 7], "invoiced_rate": 0.0, "write_uid": [1, "Administrator"], "currency_id": [1, "EUR"], "invoice_ids": [], "invoice_exists": false, "client_order_ref": false, "date_order": "2018-04-06 09:01:39", "partner_id": [19, "Chamber Works"], "message_ids": [274, 248, 247], "message_summary": " ", "amount_tax": 0.0, "procurement_group_id": false, "fiscal_position": false, "amount_untaxed": 377.5, "message_is_follower": true, "__last_update": "2018-04-06 11:04:13", "payment_term": false, "message_last_post": "2018-04-06 11:04:13", "company_id": [1, "YourCompany"], "id": 3, "note": false, "state": "manual", "paypal_url": false, "pricelist_id": [1, "Public Pricelist (EUR)"], "invoiced": false, "create_uid": [1, "Administrator"], "portal_payment_options": "", "section_id": [1, "Direct Sales"], "write_date": "2018-04-06 11:04:13", "partner_invoice_id": [19, "Chamber Works"], "user_id": [1, "Administrator"], "date_confirm": "2018-04-06", "amount_total": 377.5, "project_id": false, "name": "SO003", "partner_shipping_id": [19, "Chamber Works"], "product_id": [2, "On Site Monitoring"], "order_policy": "manual", "message_unread": false}]








sJSon is ANSI string = EDT_NoName1 ( which contain the Json )


let vjs=JSONToVariant(sJSon)








FOR EACH _Member OF vjs..Member





IF _Member..Member..Occurrence = 0 THEN


Trace("The member " + _Member..Name + " has the value " +


Member..Value)


ELSE


Trace("The member " + _Member..Name + " has " +


Member..Member..Occurrence + ...


" other members")


BrowseVariantMembers(_Member)


END


END








PROCEDURE BrowseVariantMembers(x)





FOR EACH _Member OF x..Member


IF _Member..Member..Occurrence = 0 THEN


Trace(RepeatString("--", StringCount(dbgInfo(dbgStack), CR)) + ...


"The member " + _Member..Name + " has the value " + _Member..Value)





ELSE


Trace(RepeatString("--", StringCount(dbgInfo(dbgStack), CR)) + ...


"The member " + _Member..Name + " has " + _Member..Member..Occurrence + ...


" other members...")





BrowseVariantMembers(_Member)


END


END








Regards,





PETER ZHOU

Hi,

Anybody can offer some help ?

Regards,

PETER ZHOU
Posté le 09 avril 2018 - 18:33
Hi Peter,

I think you need to declare a Variant variable.

e.g.


vJS is Variant=JSONToVariant(sJSon)

and then search through the object vJS
Posté le 09 avril 2018 - 18:49
Quote
steve erts

Hi Peter,





I think you need to declare a Variant variable.





e.g.








vJS is Variant=JSONToVariant(sJSon)





and then search through the object vJS

Hi Steve,

I just found out that i need to use array to see the value.

Regards,

PETER ZHOU
Posté le 09 avril 2018 - 18:59
Hi Peter

Pls see below my sample as a hint about arrays' in json,

//wd22

sItin is Structure
DayNbr is int
title is String
END

stA is Structure
Id is int
title is string
itinerary_days is dynamic array of sItin
END

ss is array of stA

s is buffer
s = [
[{
"id":540,
"title":"14-Day Ultimate Namibia Safari",
"itinerary_days": [
{ "DayNbr":1, "Title":"Day 1" },{"DayNbr":2, "Title":"Day 2" },{"DayNbr":3, "Title":"Day 3"}]
}]
]
s = fLoadBuffer("y:\galon\json\j1.json")

trace(timeSys(),"s2")
Deserialize(ss,s, psdJSON)
trace(ss[2].id)

n is int=1
For each item of ss[1]:itinerary_days
//trace("ok")
trace(ss[1]:itinerary_days[n].Title, ss[1]:itinerary_days[n].DayNbr)
n++
end
//

Pls share your code once completed and fixed.

HTH

King
Posté le 09 avril 2018 - 19:02
j1.json is:

[{
"id":540,
"title":"14-Day Ultimate Namibia Safari",
"itinerary_days": [{ "DayNbr":1, "Title":"Day 1" },{"DayNbr":2, "Title":"Day 2" },{"DayNbr":3, "Title":"Day 3"}]
},
{
"id":168,
"title":"14-Day Ultimate Namibia Safari",
"itinerary_days": [{ "DayNbr":1, "Title":"Day 1" },{"DayNbr":2, "Title":"Day 2" },{"DayNbr":3, "Title":"Day 3"}]
}
]