Places: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 408 column 36 path $.result.secondary_opening_hours
Environment details
OS type and version: Gradle JDK: jbr-17, 17.0.6 Kotlin JVM: 1.8.0
Library version and other environment information: com.google.maps:google-maps-services:2.2.0
Running on Ktor server v 2.2.3
Steps to reproduce
- Make a call to PlacesApi.placeDetails with placeId ChIJTSQM7Smze0gR627zU4Cvkn4
Code example
return try {
val response = PlacesApi.placeDetails(GoogleApiClient.context, id).await()
} catch (e: Throwable) {
PlacesDetailClientResponse.Error
}
Stack trace
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 408 column 36 path $.result.secondary_opening_hours
Following these steps will guarantee the quickest resolution possible.
Thanks!
If you would like to upvote the priority of this issue, please comment below or react with :+1: so we can see what is popular when we triage.
@MattWilliams89 Thank you for opening this issue. 🙏 Please check out these other resources that might help you get to a resolution in the meantime:
- Check the issue tracker - bugs and feature requests for Google Maps Platform APIs and SDKs
- Open a support case - Get 1:1 support in Cloud Console.
- Discord - chat with other developers
-
StackOverflow - use the
google-mapstag
This is an automated message, feel free to ignore.
I have received the same issue when using Java 17, and sending a request for place with id ChIJhbDp64aLGGAR5ywd2IRem7Q
According to the official API documentation here, the secondary_opening_hours field is an Array<OpeningHours>, which seems to be the cause of the problem
I bypassed this bug by excluding the secondary_opening_hours field -
PlaceDetailsRequest request = PlacesApi.placeDetails(geoApiContext, placeId);
request.fields(Arrays.stream(PlaceDetailsRequest.FieldMask.values())
.filter(x -> x != PlaceDetailsRequest.FieldMask.SECONDARY_OPENING_HOURS)
.toArray(PlaceDetailsRequest.FieldMask[]::new));
PlaceDetails response = request.await();
Here's the same thing in Kotlin if anybody needs it:
val request = PlacesApi.placeDetails(geoApiContext, placeId)
val fields = HashSet<PlaceDetailsRequest.FieldMask>()
fields.addAll(PlaceDetailsRequest.FieldMask.values())
fields.remove(PlaceDetailsRequest.FieldMask.SECONDARY_OPENING_HOURS)
request.fields(*fields.toTypedArray())
val placeDetails: PlaceDetails? = try {
request.await()
} catch (e: Exception) {
println("refreshPlaces - Google Places SDK exception - PlacesApi.placeDetails() - placeId = ${placeId}, error = ${e.message}")
}