Aller au contenu

Valider du JSON


captain_torche

Sujets conseillés

Je récupère du JSON depuis un flux, destiné à être utilisé en JavaScript.

Je dois de mon côté l'utiliser en PHP, et je n'arrive malheureusement pas à utiliser le code tel quel, PHP ayant apparemment besoin d'une syntaxe parfaite, alors que JavaScript permet une syntaxe beaucoup plus permissive.

Voici le code en question :

				{'TLS': {'depAirportName': 'Toulouse', 7: {'standard': {'availableDatesAvailable': 'True', 'availableItemMetaData': ['11/2011', '12/2011', '1/2012', '2/2012', '3/2012'], '27/11/2011': {'skuId': '910329858', 'returnArrivalDate': '20111204T00:00:00', 'returnDepartureDate': '20111204T00:00:00', 'AI': {'boardTypeDescription': 'Formule tout compris', 'allocatedRooms': ['2-1'], 'totalRoomAllocationPrice': 858.0, 'rooms': [{'minAdultOccupancy': 2, 'roomTypeName': 'Chambre 2 personnes', 'totalRoomPrice': {'productPrice': 858.0}, 'roomTypeId': '2', 'roomPassengers': [{'passengerPrice': {'boardTypeSupplement': {'productPrice': 0.0}, 'roomTypeSupplement': {'productPrice': 0.0}, 'finalPrice': {'productPrice': 334.0}, 'holidayOptions': [{'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '460145316', 'price': 4.0, 'ruleTypeId': 29, 'longDescription': u'Taxe de solidarit\ufffd', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': u'Taxe de solidarit\xe9 4 eur', 'id': 460145316, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}, {'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '829419763', 'price': 91.0, 'ruleTypeId': 29, 'longDescription': 'Taxes Obligatoires ', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': 'Taxes Obligatoires 91 eur', 'id': 829419763, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}], 'priceModifierType': {'id': 4, 'description': 'Adult price'}, 'brochurePrice': {'productPrice': 0.0}, 'finalPriceWithSupplements': {'productPrice': 334.0}, 'allInclusivePrice': {'productPrice': 429.0}, 'allInclusiveBrochurePrice': {'productPrice': 0.0}}, 'person': {'passengerType': {'passengerTypeId': 1, 'passengerTypeName': 'Adult'}}, 'quantity': 2}], 'quantity': 1}], 'allInclusivePrice': 429.0}, 'departureArrivalDate': '20111127T00:00:00', 'ticketOnDeparture': ''}}}}, 'availableRooms': {'standard': [{'roomTypeId': '3', 'minAdultOccupancy': 2, 'roomTypeName': 'Chambre 2 adultes + 1 enfant', 'quantity': 1}, {'roomTypeId': '2', 'minAdultOccupancy': 2, 'roomTypeName': 'Chambre 2 personnes', 'quantity': 1}, {'roomTypeId': '4', 'minAdultOccupancy': 2, 'roomTypeName': 'Chambre 2 adultes + 2 enfants', 'quantity': 1}, {'roomTypeId': '1', 'minAdultOccupancy': 1, 'roomTypeName': 'Chambre 1 personne', 'quantity': 2}]}, 'PAR': {'depAirportName': 'Paris', 7: {'standard': {'availableDatesAvailable': 'True', 'availableItemMetaData': ['11/2011', '12/2011', '1/2012', '2/2012', '3/2012'], '27/11/2011': {'skuId': '910608983', 'returnArrivalDate': '20111204T00:00:00', 'returnDepartureDate': '20111204T00:00:00', 'AI': {'boardTypeDescription': 'Formule tout compris', 'allocatedRooms': ['2-1'], 'totalRoomAllocationPrice': 638.0, 'rooms': [{'minAdultOccupancy': 2, 'roomTypeName': 'Chambre 2 personnes', 'totalRoomPrice': {'productPrice': 638.0}, 'roomTypeId': '2', 'roomPassengers': [{'passengerPrice': {'boardTypeSupplement': {'productPrice': 0.0}, 'discount': {'percentageDiscount': 34.0, 'discountAmount': {'productPrice': 170.0}}, 'roomTypeSupplement': {'productPrice': 0.0}, 'finalPrice': {'productPrice': 224.0}, 'holidayOptions': [{'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '460145316', 'price': 4.0, 'ruleTypeId': 29, 'longDescription': u'Taxe de solidarit\ufffd', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': u'Taxe de solidarit\xe9 4 eur', 'id': 460145316, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}, {'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '829419763', 'price': 91.0, 'ruleTypeId': 29, 'longDescription': 'Taxes Obligatoires ', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': 'Taxes Obligatoires 91 eur', 'id': 829419763, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}], 'priceModifierType': {'id': 4, 'description': 'Adult price'}, 'brochurePrice': {'productPrice': 394.0}, 'finalPriceWithSupplements': {'productPrice': 224.0}, 'allInclusivePrice': {'productPrice': 319.0}, 'allInclusiveBrochurePrice': {'productPrice': 489.0}}, 'person': {'passengerType': {'passengerTypeId': 1, 'passengerTypeName': 'Adult'}}, 'quantity': 2}], 'quantity': 1}], 'allInclusivePrice': 319.0}, 'departureArrivalDate': '20111127T00:00:00', 'ticketOnDeparture': ''}}}}, 'bookingCharge': {'infantPrice': 0.0, 'adultPrice': 0.0, 'childPrice': 0.0}, 'LYS': {'depAirportName': 'Lyon', 7: {'standard': {'availableDatesAvailable': 'True', 'availableItemMetaData': ['11/2011', '12/2011', '1/2012', '2/2012', '3/2012'], '27/11/2011': {'skuId': '910608910', 'returnArrivalDate': '20111204T00:00:00', 'returnDepartureDate': '20111204T00:00:00', 'AI': {'boardTypeDescription': 'Formule tout compris', 'allocatedRooms': ['2-1'], 'totalRoomAllocationPrice': 638.0, 'rooms': [{'minAdultOccupancy': 2, 'roomTypeName': 'Chambre 2 personnes', 'totalRoomPrice': {'productPrice': 638.0}, 'roomTypeId': '2', 'roomPassengers': [{'passengerPrice': {'boardTypeSupplement': {'productPrice': 0.0}, 'roomTypeSupplement': {'productPrice': 0.0}, 'finalPrice': {'productPrice': 224.0}, 'holidayOptions': [{'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '460145316', 'price': 4.0, 'ruleTypeId': 29, 'longDescription': u'Taxe de solidarit\ufffd', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': u'Taxe de solidarit\xe9 4 eur', 'id': 460145316, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}, {'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '829419763', 'price': 91.0, 'ruleTypeId': 29, 'longDescription': 'Taxes Obligatoires ', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': 'Taxes Obligatoires 91 eur', 'id': 829419763, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}], 'priceModifierType': {'id': 4, 'description': 'Adult price'}, 'brochurePrice': {'productPrice': 0.0}, 'finalPriceWithSupplements': {'productPrice': 224.0}, 'allInclusivePrice': {'productPrice': 319.0}, 'allInclusiveBrochurePrice': {'productPrice': 0.0}}, 'person': {'passengerType': {'passengerTypeId': 1, 'passengerTypeName': 'Adult'}}, 'quantity': 2}], 'quantity': 1}], 'allInclusivePrice': 319.0}, 'departureArrivalDate': '20111127T00:00:00', 'ticketOnDeparture': ''}}}}, 'MRS': {'depAirportName': 'Marseille', 7: {'standard': {'availableDatesAvailable': 'True', 'availableItemMetaData': ['11/2011', '12/2011', '1/2012', '2/2012', '3/2012'], '27/11/2011': {'skuId': '910608955', 'returnArrivalDate': '20111204T00:00:00', 'returnDepartureDate': '20111204T00:00:00', 'AI': {'boardTypeDescription': 'Formule tout compris', 'allocatedRooms': ['2-1'], 'totalRoomAllocationPrice': 638.0, 'rooms': [{'minAdultOccupancy': 2, 'roomTypeName': 'Chambre 2 personnes', 'totalRoomPrice': {'productPrice': 638.0}, 'roomTypeId': '2', 'roomPassengers': [{'passengerPrice': {'boardTypeSupplement': {'productPrice': 0.0}, 'roomTypeSupplement': {'productPrice': 0.0}, 'finalPrice': {'productPrice': 224.0}, 'holidayOptions': [{'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '460145316', 'price': 4.0, 'ruleTypeId': 29, 'longDescription': u'Taxe de solidarit\ufffd', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': u'Taxe de solidarit\xe9 4 eur', 'id': 460145316, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}, {'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '829419763', 'price': 91.0, 'ruleTypeId': 29, 'longDescription': 'Taxes Obligatoires ', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': 'Taxes Obligatoires 91 eur', 'id': 829419763, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}], 'priceModifierType': {'id': 4, 'description': 'Adult price'}, 'brochurePrice': {'productPrice': 0.0}, 'finalPriceWithSupplements': {'productPrice': 224.0}, 'allInclusivePrice': {'productPrice': 319.0}, 'allInclusiveBrochurePrice': {'productPrice': 0.0}}, 'person': {'passengerType': {'passengerTypeId': 1, 'passengerTypeName': 'Adult'}}, 'quantity': 2}], 'quantity': 1}], 'allInclusivePrice': 319.0}, 'departureArrivalDate': '20111127T00:00:00', 'ticketOnDeparture': ''}}}}, 'holidayOptions': {'baseOption': {}}, 'derivedTotalRoomAllocationPrice': '', 'derivedRooms': [{'roomTypeId': '2', 'quantity': 1}], 'roomAllocationValid': {'standard': 'False'}, 'NTE': {'depAirportName': 'Nantes', 7: {'standard': {'availableDatesAvailable': 'True', 'availableItemMetaData': ['11/2011', '12/2011', '1/2012', '2/2012', '3/2012'], '27/11/2011': {'skuId': '910608972', 'returnArrivalDate': '20111204T00:00:00', 'returnDepartureDate': '20111204T00:00:00', 'AI': {'boardTypeDescription': 'Formule tout compris', 'allocatedRooms': ['2-1'], 'totalRoomAllocationPrice': 638.0, 'rooms': [{'minAdultOccupancy': 2, 'roomTypeName': 'Chambre 2 personnes', 'totalRoomPrice': {'productPrice': 638.0}, 'roomTypeId': '2', 'roomPassengers': [{'passengerPrice': {'boardTypeSupplement': {'productPrice': 0.0}, 'roomTypeSupplement': {'productPrice': 0.0}, 'finalPrice': {'productPrice': 224.0}, 'holidayOptions': [{'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '460145316', 'price': 4.0, 'ruleTypeId': 29, 'longDescription': u'Taxe de solidarit\ufffd', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': u'Taxe de solidarit\xe9 4 eur', 'id': 460145316, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}, {'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '829419763', 'price': 91.0, 'ruleTypeId': 29, 'longDescription': 'Taxes Obligatoires ', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': 'Taxes Obligatoires 91 eur', 'id': 829419763, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}], 'priceModifierType': {'id': 4, 'description': 'Adult price'}, 'brochurePrice': {'productPrice': 0.0}, 'finalPriceWithSupplements': {'productPrice': 224.0}, 'allInclusivePrice': {'productPrice': 319.0}, 'allInclusiveBrochurePrice': {'productPrice': 0.0}}, 'person': {'passengerType': {'passengerTypeId': 1, 'passengerTypeName': 'Adult'}}, 'quantity': 2}], 'quantity': 1}], 'allInclusivePrice': 319.0}, 'departureArrivalDate': '20111127T00:00:00', 'ticketOnDeparture': ''}}}}, 'NCE': {'depAirportName': 'Nice', 7: {'standard': {'availableDatesAvailable': 'True', 'availableItemMetaData': ['11/2011', '12/2011', '1/2012', '2/2012', '3/2012'], '27/11/2011': {'skuId': '910101940', 'returnArrivalDate': '20111204T00:00:00', 'returnDepartureDate': '20111204T00:00:00', 'AI': {'boardTypeDescription': 'Formule tout compris', 'allocatedRooms': ['2-1'], 'totalRoomAllocationPrice': 798.0, 'rooms': [{'minAdultOccupancy': 2, 'roomTypeName': 'Chambre 2 personnes', 'totalRoomPrice': {'productPrice': 798.0}, 'roomTypeId': '2', 'roomPassengers': [{'passengerPrice': {'boardTypeSupplement': {'productPrice': 0.0}, 'roomTypeSupplement': {'productPrice': 0.0}, 'finalPrice': {'productPrice': 304.0}, 'holidayOptions': [{'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '460145316', 'price': 4.0, 'ruleTypeId': 29, 'longDescription': u'Taxe de solidarit\ufffd', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': u'Taxe de solidarit\xe9 4 eur', 'id': 460145316, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}, {'priceDisplayStrings': [], 'baseOption': {'optionInternalCode': 'null', 'skuId': '829419763', 'price': 91.0, 'ruleTypeId': 29, 'longDescription': 'Taxes Obligatoires ', 'productTypeId': 24, 'externalId': 'null', 'shortDescription': 'Taxes Obligatoires 91 eur', 'id': 829419763, 'productId': '431713543'}, 'optionStyle': 'MANDATORY', 'maxQuantity': 0, 'quantity': 2}], 'priceModifierType': {'id': 4, 'description': 'Adult price'}, 'brochurePrice': {'productPrice': 0.0}, 'finalPriceWithSupplements': {'productPrice': 304.0}, 'allInclusivePrice': {'productPrice': 399.0}, 'allInclusiveBrochurePrice': {'productPrice': 0.0}}, 'person': {'passengerType': {'passengerTypeId': 1, 'passengerTypeName': 'Adult'}}, 'quantity': 2}], 'quantity': 1}], 'allInclusivePrice': 399.0}, 'departureArrivalDate': '20111127T00:00:00', 'ticketOnDeparture': ''}}}}}

J'ai tenté d'utiliser la fonction json_decode_nice, et la classe TidyJSON, sans succès.

Auriez-vous des pistes, ou éventuellement un script ?

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Salut !

Alors j'imagine que ce que tu mets dans ton exemple c'est la chaine JSON telle que créée par JS pendant ton traitement.

Plusieurs choses à savoir :

1. JSON fonctionne obligatoirement en UTF8 donc déjà côté PHP tout doit être nickel à ce niveau.

2. Toujours côté JS, obligatoirement encoder les chaines de ton objet avec encodeURI() avant de transmettre vers PHP.

3. Côté PHP, ta chaine est légèrement transformée durant la transmission par l'ajout de caractères d'échappement donc avant toute manip :

$Variable = stripslashes($Variable);

$Variable = json_decode($Variable);

print $Variable->Index; ( Index étant le nom d'une des propriétés de ton objet ).

Là logiquement tu récupères un objet PHP en bonne et due forme...

Bon courage pour la suite !

Modifié par BlackPage
Lien vers le commentaire
Partager sur d’autres sites

Le souci, c'est que je n'ai pas la main sur le code JSON récupéré. Et j'ai vérifié, il n'y a pas de slashes ajoutés.

Un des soucis semble venir du fait que les valeurs sont entourées de guillemets simples au lieu de doubles, mais en les inversant le souci reste le même.

Lien vers le commentaire
Partager sur d’autres sites

Salut Captain,

Ici tu as un validateur : http://jsonformatter.curiousconcept.com/

Je me suis amusée à tester le code json que tu as copié, il y avait beaucoup d'erreurs, qui se résumaient à trois types :

_ utilisation des simples quotes au lieu des guillemets

_ certaines clés sont passées sans les guillemets ni quotes (genre : 7: { au lieu de "7": {)

_ certaines valeurs étaient constituées d'un caractère tout seul suivi d'une chaîne entre quotes (ex : u'Taxe de solidarit\ufffd' : le caractère u n'a rien à faire là)

Après avoir corrigé ces trois types d'erreurs, la fonction json_decode de php fonctionne.

Il faudrait dire à celui qui produit ce code JSON de te fournir un code valide.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...