用swiftyJson swift 3解析json

时间:2017-07-11 21:32:25

标签: json swift swift3 swifty-json

虚假问题: 我有我的json:

#0  kstrtouint (s=<optimized out>, base=<optimized out>, res=0xffffffff81a8d820 <irq>) at lib/kstrtox.c:225
#1  0xffffffff8106e124 in param_set_uint (val=<optimized out>, kp=<optimized out>) at kernel/params.c:295
#2  0xffffffff8106ed98 in parse_one (handle_unknown=<optimized out>, arg=<optimized out>, max_level=<optimized out>, min_level=<optimized out>, num_params=<optimized out>, params=<optimized out>, doing=<optimized out>, val=<optimized out>, param=<optimized out>) at kernel/params.c:148
#3  parse_args (doing=<optimized out>, args=0xffff880007fdb99f "", params=<optimized out>, num=<optimized out>, min_level=<optimized out>, max_level=<optimized out>, arg=0x0 <irq_stack_union>, unknown=0xffffffff81aeb8e5 <unknown_bootoption>) at kernel/params.c:243
#4  0xffffffff81aebc6d in start_kernel () at init/main.c:518

如果像这样的“idDestino”,尝试打印结果:

       let jsonDestination = "[{\"data\": {\"destinos\": [{\"idDestino\": \"1\",\"desDestino\": \"ASUNCION\"},{\"idDestino\": \"2\",\"desDestino\": \"MIAMI\"}]}}]"

但是,永远不要输入执行第 if let dataFromString = jsonDestination.data(using: .utf8, allowLossyConversion: false) { let destinationJson = JSON(data: dataFromString) for item in destinationJson["destinos"].arrayValue { print(item["idDestino"].stringValue) } }

我也试试这个:

print(item["idDestino"].stringValue)

并收到此错误:

  

_error NSError? domain:“SwiftyJSONErrorDomain” - 代码:901 0x000060000005c080   此错误意味着:无法合并,因为JSON在顶级

上的类型不同

相同:let firtsDestinationId = destinationJson[0]["data"]["destinos"]["idDestino"] print(firtsDestinationId)

所以..我真正的问题是我不知道如何抓住我的json的数据......能帮助我吗?

PD:这个例子很好用:

let firtsDestinationId = destinationJson["data"][0]["destinos"]["idDestino"]

我的json是问题吗?怎么能正确使用?

2 个答案:

答案 0 :(得分:1)

查看我对JSON对象中每个级别的注释

[-----------------------------------------Array
   {--------------------------------------Obj
      "data":{----------------------------Obj
         "destinos":[---------------------Array
            {-----------------------------Obj
               "idDestino":"1",
               "desDestino":"ASUNCION"
            },
            {  
               "idDestino":"2",
               "desDestino":"MIAMI"
            }
         ]
      }
   }
]

下面的代码不起作用,因为destinos的JSON元素是一个数组。

let firtsDestinationId = destinationJson[0]["data"]["destinos"]["idDestino"]

您无法尝试以下代码

let firtsDestinationId = destinationJson[0]["data"]["destinos"][0]["idDestino"]

答案 1 :(得分:0)

对于其他想要浏览Json [array]的人...在我的情况下,我写下这段代码:

        <EditText
            android:id="@+id/et1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="right"
            android:hint="hint1"
            android:inputType="number"
            android:maxLength="3"
            android:textSize="24sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="/"
            android:textColor="@color/black"
            android:textSize="24sp" />

        <EditText
            android:id="@+id/et2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="right"
            android:hint="hint2"
            android:inputType="number"
            android:maxLength="3"
            android:textSize="24sp" />