js の解析と json データのシリアル化 (2)serialization_json に関するディスカッション

WBOY
リリース: 2016-05-16 17:42:18
オリジナル
986 人が閲覧しました

前のセクションでは、JSON.stringify() の基本的な使用法を説明しました。このセクションでは、シリアル化に焦点を当てます。
JSON.stringify() は、シリアル化される js オブジェクトに加えて、他の 2 つのパラメーターも受け取ることができます。これらの 2 つのパラメーターは、js オブジェクトをシリアル化するさまざまな方法を指定するために使用されます。最初のパラメーターはフィルターで、配列または関数を指定できます。2 番目のパラメーターは、JSON 文字列のインデントを保持するかどうかを示すオプションです。これら 2 つのパラメーターを単独で使用するか、組み合わせて使用​​すると、JSON シリアル化をより包括的かつ詳細に制御できます。
1. フィルタ結果
フィルタ パラメータが配列の場合、JSON.stringify() の結果には配列にリストされている属性のみが含まれます。例:

コードをコピーします コードは次のとおりです。

>









jsonText の値は
{"name": "Bill"," id":"802020114"}
2 番目のパラメーターが関数の場合、動作は少し異なります。渡された関数は、属性 (キー) 名と属性値の 2 つのパラメーターを受け取ります。属性 (キー) 名に基づいて、シリアル化するオブジェクト内の属性を処理する方法を知ることができます。プロパティ名には文字列のみを使用できます。
シリアル化されたオブジェクトの結果を変更するには、関数によって返される値が、対応するキーの値になります。ただし、関数が未定義を返した場合、対応するプロパティは無視されることに注意してください。例:


コードをコピーします コードは次のとおりです。
>


"button" onclick ="init()" value="Test" />



この関数はキーに基づいてフィルタリングします。結果として合格しました。キーが name の場合、その値を Lily に設定します。grade の場合は、属性を削除するために未定義を返します。subject の場合は、配列メソッド join( によってカンマで接続された文字列に変換されます)。 )。最後に、他の値が結果に正常に表示されるようにデフォルト項目を指定する必要があります。そうしないと、エラーが発生し、結果が表示されません。実際、この関数フィルターが初めて呼び出されるとき、渡されるキーは空の文字列であり、値は Student オブジェクトです。上記の jsonText の値は次のとおりです:
{"name":"Lily","age":12,"id":"0802020114","subject":"math, Chinese,English"}
内部的には各オブジェクトの各属性を順番に走査するため、公開キーと値の関数メソッドを使用する場合、関数の目的を理解するには、関数が 2 つのパラメーターでのみ有効であることに注意する必要があります。内部メカニズムが各属性を走査するタイミングを通知するため、一部の結果を変更し、シリアル化されたオブジェクト内の各オブジェクトがフィルターを通過する必要があるように各オブジェクトを一度に走査します。

2. 文字列のインデント

JSON.stringify() メソッドの 3 番目のパラメーターは、結果のインデントと空白文字を制御するために使用されます。このパラメータが数値の場合、インデントの各レベルのスペースの数を表します。例:



コードをコピーします
コードは次のとおりです。

>
🎜>< input type="button" onclick="init()" value="Test" />

The string saved in jsonText is:
Copy code The code is as follows:

{
"name": "Bill",
"age": 12,
"grade": 3,
"id": "0802020114",
"subject": [
"math",
"Chinese",
"English"
]
}

JSON.stringify() inserts a newline character in the result string to improve readability. As long as you pass in a valid parameter value that controls indentation, the resulting string will contain newlines (only indenting without newlines is meaningless). The maximum number of indent spaces is 10. All values ​​greater than 10 will be automatically converted to 10.

If the indent parameter is a string rather than a numeric value, this string will be used as the indent character in the JSON string (spaces will no longer be used). For example, the following effect can be achieved:
Copy code The code is as follows:

{
* "name": "Bill",
*"age": 12,
*"grade": 3,
*"id": "0802020114",
*"subject": [
**"math",
**"Chinese",
**"English"
*]
}

The same string cannot be longer than 10 characters long. If exceeded, only 10 characters will appear in the result.
3. toJSON() method
Sometimes JSON.stringify() still cannot meet the need for custom serialization of certain objects. In these cases, you can call the toJSON() method on the object to return its own JSON data format. For example:
Copy code The code is as follows:






< /body>


The above code defines a toJSON() method on the student object, which returns a combination of name and id. The final value of jsonText is as follows:
"Bill_0802020114"
toJSON() can be used as a supplement to the function filter, so it is important to understand the internal order of serialization. Assuming that an object is passed into JSON.stringify(), the order in which the object is serialized is:
(1) If the toJSON() method exists and a valid value can be obtained through it, call this method. Otherwise, serialization is performed in default order.
(2) If the second parameter is provided, apply this function filter. The value passed into the function filter is the value returned in step (1).
(3) Serialize each value returned in step (2) accordingly.
(4) If the third parameter is provided, perform the corresponding formatting.
Whether you are considering titrating the toJSON() method, considering using function filters, or needing to use both, understanding this sequence is crucial.
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート