mtkennerly / ludusavi-playnite

Playnite plugin for save backups via Ludusavi
MIT License
141 stars 9 forks source link

Ludusavi exited with 1 and invalid JSON content #45

Closed syq7970 closed 1 year ago

syq7970 commented 1 year ago

When there is a special character like "Σ" in game name will break the JSON passing. for example: NINJA GAIDEN Σ, showed in log "Ninja Gaiden 危''. NINJA GAIDEN Σ backup is ok in Ludusavi.exe, but no luck in playnite. Please help to resolve this.

29-12 20:45:49.774|DEBUG|LudusaviPlaynite#LudusaviPlaynite:Running Ludusavi: backups --api --path "Y:\Saves\Playnite" 29-12 20:45:50.851|DEBUG|LudusaviPlaynite#LudusaviPlaynite:Ludusavi exited with 0 and valid JSON content 29-12 20:46:06.816|DEBUG|GlosSIIntegration#OverlayState:Closing GlosSITargets... 29-12 20:48:06.915|DEBUG|LudusaviPlaynite#LudusaviPlaynite:Running Ludusavi: find --api --path "Y:\Saves\Playnite" --backup --normalized -- "NINJA GAIDEN Σ2" 29-12 20:48:08.080|DEBUG|LudusaviPlaynite#LudusaviPlaynite:Ludusavi exited with 0 and valid JSON content 29-12 20:48:08.080|DEBUG|LudusaviPlaynite#LudusaviPlaynite:Running Ludusavi: backup --force --merge --try-update --api --path "Y:\Saves\Playnite" -- "Ninja Gaiden 危2" 29-12 20:48:08.817|DEBUG|LudusaviPlaynite#LudusaviPlaynite:Ludusavi exited with 1 and valid JSON content Newtonsoft.Json.JsonReaderException: After parsing a value an unexpected character was encountered: o. Path 'errors.unknownGames[0]', line 7, position 3. 在 Newtonsoft.Json.JsonTextReader.ParsePostValue(Boolean ignoreComments) 在 Newtonsoft.Json.JsonTextReader.ReadStringValue(ReadType readType) 在 Newtonsoft.Json.JsonTextReader.ReadAsString() 在 Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) 在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) 在 Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) 在 Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings) 在 LudusaviPlaynite.LudusaviPlaynite.InvokeLudusavi(Invocation invocation)

mtkennerly commented 1 year ago

Thank you for reporting this! This issue will be fixed in the next release.