Незнание структуры вашего JSON немного усложняет эту проблему, но ее все же можно решить. У меня возникла идея рекурсивного поиска по словарю
extension Dictionary
{
mutating func updateValueRecursively(forKey key : Key, newValue: Value) -> Bool
{
if keys.contains(key)
{
self[key] = newValue
return true
}
for (_, value) in enumerated()
{
if var dict = value.value as? Dictionary<Key, Value> {
if dict.updateValueRecursively(forKey: value.key, newValue: newValue), let newDict = dict as? Value {
self[value.key] = newDict
return true
}
}
}
return false
}
}
Конечно, сначала вам нужно превратить строку JSON в словарь
var dict : Dictionary<String : Any>
if let data = jsonString.data(using: .utf8) {
do {
dict= try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
} catch {
print(error.localizedDescription)
}
. Какао Objective C (Mac OS X, я не знаю для специфик iPhone):
NSString * applicationPath = [[NSBundle mainBundle] bundlePath];
В Java вызовы
System.getProperty("user.dir")
и
new java.io.File(".").getAbsolutePath();
возвратите текущий рабочий каталог.
Вызов к
getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
возвращает путь к файлу JAR, содержащему текущий класс или элемент ПУТИ К КЛАССУ (путь), который привел к текущему классу, если Вы работаете непосредственно от файловой системы.
Пример:
Ваше приложение расположено в
C:\MyJar.jar
Откройте оболочку (cmd.exe) и cd
к C:\test\subdirectory.
Запустите приложение с помощью команды java -jar C:\MyJar.jar
.
Первые два вызова возвращают 'C:\test\subdirectory'; третий вызов возвращает 'C:\MyJar.jar'.
При выполнении от файловой системы, а не файла JAR, результатом будет путь к корню сгенерированных файлов класса, например
c:\eclipse\workspaces\YourProject\bin\
Путь не включает каталоги пакета для сгенерированных файлов класса.
Полный пример для получения каталога приложения без .jar имени файла или соответствующего пути к файлам класса при выполнении непосредственно от файловой системы (например, при отладке):
String applicationDir = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
if (applicationDir.endsWith(".jar"))
{
applicationDir = new File(applicationDir).getParent();
}
// else we already have the correct answer
In Tcl
Путь текущего скрипта:
set path [info script]
Путь оболочки Tcl:
set path [info nameofexecutable]
Если вам нужен каталог чего-либо из этого, сделайте:
set dir [file dirname $path]
Получить текущий (рабочий) каталог:
set dir [pwd]