Actually the received JSON contains Chinese characters instead of ?
you posted and should look like:
{
"status": "ok",
"data": {
"aqi": 164,
"idx": 7130,
"attributions": [
{
"name": "Hunan Environmental Protection Agency (湖南省环境保护厅)"
},
{
"name": "China National Urban air quality real-time publishing platform (全国城市空气质量实时发布平台)"
}
],
"city": {
"geo": [
33.8561,
115.7831
],
"name": "sanguó lanshèng gong, Bozhou"
},
"dominentpol": "pm25",
"iaqi": {
"co": {
"v": 14.8
},
"no2": {
"v": 24.7
},
"o3": {
"v": 45.9
},
"pm10": {
"v": 97
},
"pm25": {
"v": 164
},
"so2": {
"v": 5.1
}
},
"time": {
"s": "2017-04-06 04:00:00",
"tz": "+08:00",
"v": 1491451200
}
}
}
Therefore you have to set encoding of the snippet being appended as Unicode explicitly. I suggest to use the below simple functions to read, write and append text files via Scripting.FileSystemObject
:
Function ReadTextFile(sPath As String, lFormat As Long) As String
' lFormat -2 - System default, -1 - Unicode, 0 - ASCII
With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 1, False, lFormat)
ReadTextFile = ""
If Not .AtEndOfStream Then ReadTextFile = .ReadAll
.Close
End With
End Function
Sub WriteTextFile(sContent As String, sPath As String, lFormat As Long)
With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 2, True, lFormat)
.Write sContent
.Close
End With
End Sub
Sub AppendTextFile(sContent As String, sPath As String, lFormat As Long)
With CreateObject("Scripting.FileSystemObject").OpenTextFile(sPath, 8, True, lFormat)
.Write sContent
.Close
End With
End Sub
So you can append the string by the calling:
AppendTextFile Jsonline & vbCrLf, "C:JSON_AQI.json", -1