2014-12-21 12 views
-2

我正在爲Minecraft創建一個啓動器。我有一個問題,我的啓動程序使用json文件來加載和檢查文件。我怎樣才能從這個json(例子)添加字符串到AssetsList? https://s3.amazonaws.com/Minecraft.Download/indexes/1.8.jsonVB.NET如何解析和添加結果到JSON文件的列表(字符串)?

我的代碼,如果它可以幫助你瞭解我(我使用Newtonsoft.json解析JSON):

的MCAssets類:

Public Class MCAssets 
    Public hash As String 
End Class 

名單:

Public AssetsList As New List(Of String) 

獲取資產的功能:

Public Async Function GetAssets() As Task 
    If Not Directory.Exists(Root + "\assets\indexes") Then 
     Directory.CreateDirectory(Root + "\assets\indexes") 
    End If 
    Dim client = New WebClient() 
    Await client.DownloadFileTaskAsync(New Uri(String.Format("http://s3.amazonaws.com/Minecraft.Download/indexes/{0}.json", AssetIndex)), String.Format(Root + "\assets\indexes\{0}.json", AssetIndex)) 
    Dim reader As New StreamReader(Root + "\assets\indexes\" + AssetIndex + ".json") 
    Dim assets As String = reader.ReadToEnd() 
    reader.Close() 
    Dim jsonresult = JsonConvert.DeserializeObject(Of Object)(assets) 
    For Each i In jsonresult("objects").Children() 
     AssetsList.Add(i.ToObject(Of MCAssets).hash) 
    Next 
End Function 

如果你想知道更多關於我的世界資產,請訪問此:https://github.com/tomsik68/mclauncher-api/wiki/Minecraft-1.6-resources

+3

提供的代碼段的問題究竟是什麼?什麼/不按預期工作? – EWit

+1

什麼異常將被處理?你能否處理它並向我們展示實際出錯的堆棧軌跡? – EWit

+0

你確定你通過了正確的Uri嗎?因爲,在我的眼中,新的http://s3.amazonaws.com/Minecraft.Download/indexes/「+ AssetIndex +」/「+ AssetIndex +」.json「'與您的示例鏈接不匹配。 – user3473830

回答

1

你可以做這樣的事情:

Dim assetsObject = JsonConvert.DeserializeObject(Of JObject)(assets) 'assets is your json file 
Dim allAssets = (From i In assetsObject("objects").Children() _ 
       Select New MCAssets() With {.hash = i.First.Value(Of String)("hash")}).ToList() 

順便說一句,有沒有真正需要做一個自定義類。您可以將所有散列添加到字符串列表中,如下所示:

Dim assetsObject = JsonConvert.DeserializeObject(Of JObject)(assets) 
Dim allAssets = (From i In assetsObject("objects").Children() _ 
       Select i.First.Value(Of String)("hash")) 
+0

如何將所有資產添加到資產清單中?我想將所有資產添加到列表中,然後將所有assets.all.item的前兩個字母添加到路徑列表中。 – ProGamingHun

+0

按資產你是指每個資產的名稱。例如,第一個「realms/lang/de_DE.lang」?但是你說你只想要前兩個字母're'。正確? –

+0

Sory最近的例子:adhjvnkfirioskkokdmsjnaskla這是一個哈希的例子,我想從json中得到這個,然後從列表中得到第2個字母,並將它添加到另一個列表中,因爲這是路徑,而完整的哈希作爲文件名,所以路徑:廣告和文件名:adhjvnkfirioskkokdmsjnaskla謝謝! – ProGamingHun